静态数组的数组名是个啥?
今天练习写程序,欲对一个静态数组进行引用时发现出错
int a[2]; int *&p=a;
VS2008报错error C2440: “初始化”: 无法从“int [2]”转换为“int *&”
在查找资料时,有人说道静态数组的数组名是一个常量指针,于是我修改代码如下
int a[2]; int *const &p=a;
于是就没有问题了,可是我还从来不知道数组名是常量指针,再继续查找资料,有人说

http://bbs.csdn.net/topics/90022674
文中说,数组名作为右值使用时,是指向数组第一个元素的指针,是一个指向不能再被改变的指针,C++ Primer也提到了指向数组第一个元素,但是没有提到该指针不能被改变,我想,如果该指针被改变,就不能利用它来访问连续的数组空间了,所以必须是个常量。

将常量赋值给变量,自然可以,但是声明常量的引用并初始化,需要标明const。
当数组名为左值时,一般用于sizeof,&操作,分别得到数组的长度和该数组连续空间的起始位置。
int a[2]; cout<<sizeof(a)<<" "<<&a<<endl;
结果为8和一个地址值。
那么
cout<<a<<&a<<endl;
结果会是相同,一个代表数组第一个值的指针,一个代表数组连续空间的起始位置,他们的值一定是相同的。
浙公网安备 33010602011771号