C 指向字符串数组的指针
我不理解这部分代码:C 指向字符串数组的指针,c,arrays,string,pointers,C,Arrays,String,Pointers,我不理解这部分代码: char *arrStr[3]; arrStr[0] = "hola"; //works *(arrStr+1) = "guys"; //works arrStr++; // doesn't work why? char **arrStr2 = arrStr; //works arrStr2++; //works 我不明白为什么arrStr++在arrStr2工作时不工作 这很奇怪,因为我在做同样的事情,但在一种情况下它在另一种情况下不
char *arrStr[3];
arrStr[0] = "hola"; //works
*(arrStr+1) = "guys"; //works
arrStr++; // doesn't work why?
char **arrStr2 = arrStr; //works
arrStr2++; //works
我不明白为什么arrStr++
在arrStr2
工作时不工作
这很奇怪,因为我在做同样的事情,但在一种情况下它在另一种情况下不起作用,为什么
char *arrStr[3];
如果将数组名称用作指针,则必须知道此指针是一个常量
指针,因此不能执行++
或--
运算符,char*str=“ciao”代码>只需声明一个普通指针,就可以对其执行所有操作
如果将数组名称用作指针,则必须知道此指针是一个常量
指针,因此不能执行++
或--
运算符,char*str=“ciao”
只需声明一个普通指针,就可以对其执行任何操作。*arrStr[3]
是指向char
的3个指针数组,而**arrStr2
是指向char
的指针数组。在
arrStr[0] = "hola";
arrStr
是一个数组,数组名是不可修改的l值,因此不能修改它。另一方面,可以对arrStr
进行修改,因为它是指向指针的指针,而不是数组。请记住,数组不是指针*arrStr[3]
是指向char
的三个指针的数组,而**arrStr2
是指向char
的指针。在
arrStr[0] = "hola";
arrStr
是一个数组,数组名是不可修改的l值,因此不能修改它。另一方面,可以对arrStr
进行修改,因为它是指向指针的指针,而不是数组。请记住,数组不是指针arrStr
是指针数组,不能修改数组名称<代码>arrStr++代码>无法编译
arrStr2
是指向指针的指针,您可以修改指针。你应该考虑一个更好的名字,因为它不是一个数组。 <代码> ARRSTR 是一个指针数组,你不能修改数组名。代码>arrStr++代码>无法编译
arrStr2
是指向指针的指针,您可以修改指针。你应该考虑一个更好的名字,因为它不是一个数组。@ GioVANIFAR数组名称在某些情况下被自动转换为指向第一个元素的指针(比如传递为函数参数),但是,数组不是PoTr.OK,但是两者都有一个引用…所以我看不出有什么不同。现在一切都清楚了。对于一个数组,我在数组中直接移动,在获取它之后,我只改变目标的点。但所有过程都在指针引用的内部。阵列号为。。。我有一个参考资料,但我直接去了那里,我把位置移到了那里。使用指针时,您将保持在指针内,并在指针内增加引用,最后在此处获取指针内的值reference@GiovanniFar在某些情况下(如作为函数参数传递),数组名会自动转换为指向第一个元素的指针,但不,数组不是指针。确定,但两者都有引用。。。所以我看不出有什么不同。现在一切都清楚了。对于一个数组,我在数组中直接移动,在获取它之后,我只改变目标的点。但所有过程都在指针引用的内部。阵列号为。。。我有一个参考资料,但我直接去了那里,我把位置移到了那里。使用指针,您将保持在它的内部,并在那里递增引用,最后在该引用处获取内部的值