#include <stdio.h>
void printa(char *a[])
{
for (int i = 0; i < 3; ++i) {
printf("%s\n", *a);
a++;
}
}
int main(void)
{
char *a[] = {"The first", "The second", "The third"};
for (int i = 0; i < 3; ++i) {
printf("%s\n", *a);
a++; // error: cannot increment value of type 'char *[3]'
}
printa(a); //OK
return 0;
}
因此,我的问题是为什么主函数中的代码a++
导致编译错误(错误:不能增加类型'char * [3]'的值)。但是,如果我将指针a的数组传递给函数printa
并在该指针上调用a++
,它就可以正常工作。
谢谢,
答案 0 :(得分:3)
Postfix ++
不能拥有数组类型的操作数。 a
函数中main
的类型为char *[3]
,即 数组指向char
的函数printa
它的类型为char **
。
作为功能参数
char *a[]
相当于
char **a
答案 1 :(得分:1)
仅仅因为数组名称是不可修改的l值。在任何表达式中都不能用作左操作数。因此,您不能将它保留在=
表达式的左侧,或使用增量运算符将其递增
答案 2 :(得分:1)
当你调用printa函数时,参数现在是char **类型的另一个变量。你可以增加的变量。
但是在main中,你不能修改 a 作为数组的基本位置。否则你会得到 I-Value 错误。