+ -
当前位置:首页 → 问答吧 → 数组与引用

数组与引用

时间:2011-12-23

来源:互联网

int a[10];
int (&x)[10] =a;
在编译器上是正确的,但老师却说数组不能作为引用。

#include <iostream>
using namespace std;
int main()
{
  int a[10]={1,2,3,4};
  int (&x)[10]=a; //这句
  for(size_t index=0;index!=sizeof(a)/sizeof(a[0]);++index)
   
  cout<<*x+index<<" ";
  return 0;
}

。。。。。。有这样的规定吗?

作者: china_ymex   发布时间: 2011-12-23

因为:
c++中,引用可以说只是某个变量的别名,所谓别名,是和指针类型区分开的:指针类型也可以指向某个变量,但指针类型本身也是一个变量,而引用实际上不是一个变量。更本质来说,可以理解为引用没有自身的地址,不占用内存空间(这里为了简化问题可以这样考虑)。因此,声明引用数组没有办法分配空间,因为根本就没有空间可以分配给引用。所以不能声明和定义引用数组。

作者: dongshaojie1991   发布时间: 2011-12-23

很简单,老师错了。常事,见怪不怪

作者: mingliang1212   发布时间: 2011-12-23

我想是你听错了,引用不能作为数组元素。

作者: mingliang1212   发布时间: 2011-12-23

你老师没说错,但是你这个表达式(&x)[10]根本不是引用数组,而是数组的引用,是指X引用一个维数为10的数组。这是让数组不退化为指针的方法之一。

而&x[10],这是引用数组,这才是reference illegal的情况,也就是你老师说的不能这么写的情况。

此种情况和指针类似,(*a)[10],按右结合来,首先是数组,然后是指针,所以这个变量是维数为10的数组的指针,而这个*a[10],这个是按左结合来,首先是指针,然后是数组,所以这个变量是具有十个指针的数组。

一点点书写上的差别,表达的意义是完全不同的。

作者: LinuxTiger   发布时间: 2011-12-23