数组与引用
时间: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;
}
。。。。。。有这样的规定吗?
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++中,引用可以说只是某个变量的别名,所谓别名,是和指针类型区分开的:指针类型也可以指向某个变量,但指针类型本身也是一个变量,而引用实际上不是一个变量。更本质来说,可以理解为引用没有自身的地址,不占用内存空间(这里为了简化问题可以这样考虑)。因此,声明引用数组没有办法分配空间,因为根本就没有空间可以分配给引用。所以不能声明和定义引用数组。
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],这个是按左结合来,首先是指针,然后是数组,所以这个变量是具有十个指针的数组。
一点点书写上的差别,表达的意义是完全不同的。
而&x[10],这是引用数组,这才是reference illegal的情况,也就是你老师说的不能这么写的情况。
此种情况和指针类似,(*a)[10],按右结合来,首先是数组,然后是指针,所以这个变量是维数为10的数组的指针,而这个*a[10],这个是按左结合来,首先是指针,然后是数组,所以这个变量是具有十个指针的数组。
一点点书写上的差别,表达的意义是完全不同的。
作者: LinuxTiger 发布时间: 2011-12-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28