静态数组的数组名是个啥?

今天练习写程序,欲对一个静态数组进行引用时发现出错

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;

结果会是相同,一个代表数组第一个值的指针,一个代表数组连续空间的起始位置,他们的值一定是相同的。

posted on 2013-10-30 11:27  wtianxi  阅读(1321)  评论(0)    收藏  举报

导航