这可能是一件非常微不足道的事情,但到目前为止,它有点让我失望..
char * a3[2];
a3[0] = "abc";
a3[1] = "def";
char ** p;
p = a3;
这有效:
printf("%p - \"%s\"\n", p, *(++p));
这不是:
printf("%p - \"%s\"\n", a3, *(++a3));
我在编译时遇到的错误是:
左值作为递增操作数
我做错了什么,为什么以及'a3'的解决方案是什么?
答案 0 :(得分:4)
您无法分配到a3
,也无法增加它。数组名称是常量,不能更改。
答案 1 :(得分:4)
a3是一个常量指针,你不能递增它。 “p”是指向a3开头的通用指针,可以递增。
答案 2 :(得分:0)
尝试
char *a3Ptr = a3;
printf("%p - \"%s\"\n", a3, *(++a3Ptr));
在C中,char数组[]与char *不同,即使您可以使用char *来引用char数组的第一个位置。
不是指针的“p”和“a3”指针吗?
是的,但a3是不变的。你不能修改它。
答案 3 :(得分:0)
a3
是数组的名称。这是关于它作为常量指针。
你不能改变它。您可以使用a3 + 1
代替++a3
。
另一个问题是对%s
参数使用“*(++a3)
”。由于a3是char数组,*a3
是一个字符,相应的格式说明符应为%c
。
答案 4 :(得分:0)
创建后,您无法将任何char数组增加或指向其他内容。您需要使用索引修改或访问。 like a[1]