【发布时间】:2012-04-01 08:45:02
【问题描述】:
考虑代码:
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[]);
【问题讨论】:
-
阅读comp.lang.c FAQ的第6部分。