首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于c++中数组引用的有关问题, 请

2012-02-21 
关于c++中数组引用的问题, 请高手指点int a[3] {1, 2, 3}请教&a[3]是什么意思! 这个表达式的结果会是什

关于c++中数组引用的问题, 请高手指点
int a[3] = {1, 2, 3};
请教&a[3]是什么意思! 这个表达式的结果会是什么(我已经做过测试&a[3]不是对a[3]进行取址操作)???

[解决办法]
数组一共3个数,哪里来的a[3]?越界访问了。
另外&a[2]就是取a【2】的地址。
函数参数中的&是引用的意思比如:
void Test(int &k);
k是引用
[解决办法]
&a[3]不是对a[3]取地址? 不知道lz用了什么测试来证明...

顺便提一下,a[3]已经越界了...
[解决办法]
当然不是,因为没有a[3]
[解决办法]
c 数组下标 从 0 开始
 int a[3]; 3个元素分别是 a[0] a[1] a[2]
[解决办法]
&a[3]是取地址操作,只不过是越界操作而已。
要是引用的话,要有左值
如 int &a = &a[3];
[解决办法]
&a[3]就是数组最后一个元素后面的地址吗?正好相差一个int吧
[解决办法]
我也做了下测试,&a[3]是a[2]后面的一个地址
[解决办法]
&a[3]是取地址,可以看成这样(&a+3),由于a是数组,+3是加的数组占的字节数,在这为4*3为12.(和a+3是不同的)。
在这你要是&a[2]就不同了。因为2在范围内,就是取a【2】的地址。
int a[4] = {1, 2, 3};
int k = (int)&a[4];
int t = k - (int)a; //结果为16.
[解决办法]
越界!!
[解决办法]
是取地址的操作, 这是高手写出来的精致代码.

如果你同时定义了两个连续的变量, 如下:

int a[3] = {1, 2, 3}; 
int b[100];

那么&a[3]的结果就是下一个变量的地址也就是b的地址.

以上代码可适用在全局变量定义和函数内的变量定义.
[解决办法]
数组越界了,数组下标是从0开始而不是从1开始的哟

以后注意下就好了
小问题
[解决办法]
再重复一遍,数组的引用应该这样写:

C/C++ code
int a[10];//数组aint (&b)[10]=a;//b是a的引用
[解决办法]
都越界了。。。
[解决办法]
请看如下程序及其注解:

int main()
{
int a[3] = {1, 2, 3}; 
//数级的引用:
int (&_rAry)[3] = a;//正确的数组引用声明语法!
cout << _rAry[2] << endl;

_PAUSE;
}

楼组的'&a[3];'的确不是数组的引用语法,而是数组a的下标3的地址(当然,对于数组a,a[3]显然是下标越界!)

修改上述程序,可以证明如上论述:

int main()
{
int a[4] = {1, 2, 3,4};//确保a[3]不下标越界! 

int (&_rAry)[4] = a;//声明a的数组引用;
cout << _rAry[2] << endl;//使用引用,Ok!

int* _p = &a[3];//演示楼主的'&a[3]'是地址提取,获取到a[3]的地址!
cout << *_p << endl;//指针解引用成功,证明上述论述!

_PAUSE;
}

热点排行