数组名不允许被赋值(做左值)的问题

我们都知道给数组名赋值是不允许的
int a[];
a=1;
a=a++;
有人给出不同的解释,1,类型不相容,int不能给int[]赋值;
2.数组名在表达式中表示指向首元素的常量指针,这个常量运行时才被分配到栈中,既然是常量当然不允许修改,
两种说法听起来都很有道理,有意思的是当按照上例中的两种情况运行,编译器也会依照这两种解释报错,那到底哪一个是对的呢

当然是第二种,数组名就是数组的首地址。因为数组一旦定义就会被分配一片连续的空间,因此数组的首地址是不变的,因此可以说数组名是一个常量指针,一旦定义就不能再被赋值了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-24
数组名是地址常量, 不能被赋值! 指针是地址变量, 可以被赋值. 这点区别要搞清楚.
int a[];
int *p;
p=a;
p++;
这样是合法的语句, 但是注意p=1这样的语句虽然可以编译通过, 但是是毫无意义的, 因为p指向一个未知的地址.
第2个回答  2010-04-22
我感觉上面的a它只是一个指针,变成*a怎么样
相似回答