我在指针数组中使用递增运算符时发现了一点混乱。
代码1:
int main(void) {
char *array[] = {"howdy", "mani"};
printf("%s", *(++array));
return 0;
}
编译时,gcc会抛出一个众所周知的错误“左值作为递增操作数”。
但是,当我编译下面的代码时,它显示没有错误!为什么呢?
代码2:
int main(int argc, char *argv[]) {
printf("%s",*(++argv));
return 0;
}
在这两种情况下,我都在增加一个指针数组。所以,应该这样做。
char *array[] = {"howdy","mani"};
char **pointer = array;
printf("%s",*(++pointer));
但是,为什么code2没有显示错误?
答案 0 :(得分:5)
无法增加数组。
在第一个代码示例中,您尝试增加数组。在第二个代码示例中,您尝试递增指针。
让你失望的是,当数组声明符出现在函数参数列表中时,它实际上被调整为指针声明符。 (这与数组指针衰减不同)。在第二个代码段中,char *argv[]
实际上意味着char **argv
。
See this thread进行类似的讨论。