我不明白这部分代码:
char *arrStr[3];
arrStr[0] = "hola"; //works
*(arrStr+1) = "guys"; //works
arrStr++; // doesn't work why?
char **arrStr2 = arrStr; //works
arrStr2++; //works
我不明白为什么arrStr++
在arrStr2
工作时不起作用。
这很奇怪,因为我正在做同样的事情,但在一个案例中,它在另一个案例中不起作用,为什么会这样?
答案 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}}只是声明一个普通的指针,你可以做到每一个。