2013-11-29 114 views
0

的数组我不明白这部分代码:指向字符串的指针

char *arrStr[3]; 
arrStr[0] = "hola"; //works 
*(arrStr+1) = "guys"; //works 
arrStr++;    // doesn't work why? 

char **arrStr2 = arrStr; //works 
arrStr2++; //works 

我不明白为什么arrStr++不同时arrStr2工程工作。

这很奇怪,因为我在做同样的事情,但在一个案例中,它在另一个案件中工作,为什么?

回答

3

*arrStr[3]是指向char的3个指针的数组,而**arrStr2指向指向char的指针。在

arrStr[0] = "hola"; 

arrStr是一个数组,数组名不可改变左值,因此你不能修改它。另一方面,可以在arrStr上进行修改,因为它是指向指针的指针而不是数组。请记住数组不是指针

0
char *arrStr[3]; 

如果使用数组名作为指针,你必须知道,这个指针是const指针,所以你不能做++--操作,char *str = "ciao";只是声明了一个正常的指针,你可以做每一个。

2

arrStr是一个指针数组,你不能修改数组名。 arrStr++;将不会编译。

arrStr2是一个指针指针,你可以修改一个指针。你应该考虑一个更好的名字,因为它不是一个数组。

+0

为什么不呢?他们里面有一个像指针没有参考? –

+0

@GiovanniFar在某些情况下,数组名称会自动转换为指向第一个元素的指针(就像函数参数传递一样),但是不,**数组不是指针**。 –

+0

确定,但两者都有一个参考...所以我不能看到区别 –