指针数组中的递增运算符有什么问题?

时间:2015-10-19 00:44:50

标签: c arrays pointers

我在指针数组中使用递增运算符时发现了一点混乱。

代码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没有显示错误?

1 个答案:

答案 0 :(得分:5)

无法增加数组。

在第一个代码示例中,您尝试增加数组。在第二个代码示例中,您尝试递增指针。

让你失望的是,当数组声明符出现在函数参数列表中时,它实际上被调整为指针声明符。 (这与数组指针衰减不同)。在第二个代码段中,char *argv[]实际上意味着char **argv

See this thread进行类似的讨论。