指向字符串数组的指针

时间:2013-11-29 02:16:00

标签: 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工作时不起作用。

这很奇怪,因为我正在做同样的事情,但在一个案例中,它在另一个案例中不起作用,为什么会这样?

3 个答案:

答案 0 :(得分:3)

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

arrStr[0] = "hola";  

arrStr是一个数组,数组名称是不可修改的l值,因此您无法对其进行修改。另一方面,可以在arrStr上进行修改,因为它是指向指针但不是数组的指针。请记住 数组不是指针

答案 1 :(得分:2)

arrStr是一个指针数组,您无法修改数组名称。 arrStr++;将无法编译。

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

答案 2 :(得分:0)

char *arrStr[3];

如果您使用数组名称作为指针,则必须知道此指针是const指针,因此您无法执行++--运算符{{ 1}}只是声明一个普通的指针,你可以做到每一个。