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在某些情况下(如作为函数参数传递),数组名会自动转换为指向第一个元素的指针,但不,数组不是指针。确定,但两者都有引用。。。所以我看不出有什么不同。现在一切都清楚了。对于一个数组,我在数组中直接移动,在获取它之后,我只改变目标的点。但所有过程都在指针引用的内部。阵列号为。。。我有一个参考资料,但我直接去了那里,我把位置移到了那里。使用指针,您将保持在它的内部,并在那里递增引用,最后在该引用处获取内部的值