考虑以下代码:
void foo(char a[]){
a++; // works fine, gets compiled
//...
}
现在,请考虑以下内容:
void foo(){
char a[50];
a++; // Compiler error
//...
}
我听说数组等同于一个常量指针,不能被增加因为它不是左值...
那么为什么第一段代码可以编译。这是因为将数组作为函数参数时会被转换为指针,也就是T[]会被转换为T*来传递。
所以,foo(a)会将a作为指针传递。
但难道不会再次被转换回T[]吗?因为声明如下:
void foo(char a[]);