在C中递增指针数组

时间:2011-06-03 10:40:50

标签: c arrays pointers

这可能是一件非常微不足道的事情,但到目前为止,它有点让我失望..

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'的解决方案是什么?

5 个答案:

答案 0 :(得分:4)

您无法分配到a3,也无法增加它。数组名称是常量,不能更改。

c-faq

答案 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]