注册 登录
编程论坛 C++教室

关于数组的引用 为什么引用的地址和数组的首地址不一样

脱托 发布于 2010-11-01 19:26, 1577 次点击
#include<iostream>
using namespace std;
int main()
{  int a[3]={1,2,3};
  int &b=a[3];
  cout<<&b<<endl;
   cout<<&a[0]<<endl;
return 0;
}

为啥两个输出的不一样呢

ps:int &b=a[3];这个表达式有没有问题啊 ,数组的引用到底有什么用,怎么通过b去用数组a的元素啊


[ 本帖最后由 脱托 于 2010-11-1 20:18 编辑 ]
20 回复
#2
2010-11-01 19:43
   你的题目就写错了,定义int a[3]的数组有a[3]吗?
   一个是a[0]的地址,一个是a[3](应该是a[2])的地址,你说一样不,
   比如a[0]的地址1000,a[1]的地址是1004,那a[2]就是1008了,不过这个可能不准确,有的编译器定义int的字节不一样。
   
#3
脱托2010-11-01 19:51
回复 2楼 小鱼漂流
2楼你理解错了 我是想把这个数组用别名b来代替 并不是把a【3】这个元素用别名b
#4
hahayezhe2010-11-01 20:09
2楼没说错
首先 a[3]你越界了
int & i = a[0];
int *&i=a;

[ 本帖最后由 hahayezhe 于 2010-11-1 20:10 编辑 ]
#5
lys2457447292010-11-01 20:11
这个程序倒是可以编译通,不过&b显示的是a[2]下一个元素的地址,并不是这个数组的首地址!!!
#6
a3962803962010-11-01 20:12
编译器处理代码会和二楼说的一样,楼主的想法是好的,但要考虑到运算付的优先级问题,电脑毕竟不是人,它只按照优先级去处理数据
#7
2010-11-01 20:13
   好像按程序的意思就是那样理解吧,引用是先看b=a[3],然后再编译&,也就等于&(b=a[3]);
按你的意思也不是这样写的吧,
#8
2010-11-01 20:16
  按照你的意思应该是将&b=a[3]改为*b=a;这才符合你的要求。
#9
lys2457447292010-11-01 20:20
改成*b=a,最后的地址也不对
#10
lys2457447292010-11-01 20:23
把&b=a改成*b=a,最后的输出&b改成b就可以了。。。
数组用指针好操作写
#11
脱托2010-11-01 20:29
回复 10楼 lys245744729
嗯用指针是很好理解 我就是想知道有没有数组的引用这回事
#12
2010-11-01 20:41
  我只想问你,你学了多久C++了,有学过C没。
#13
脱托2010-11-01 20:42
回复 12楼 小鱼漂流
学过c了啊 C++学了一个月了把
#14
pangding2010-11-01 20:47
有数组的引用,楼主的語法没写对。是这样的:
int a[3];
int (&b)[3] = a;

根大家说的优先级有点关系,但不用按优先级记也可以。
不是函数指针之类的都是这么写的么。看着也习惯,写着也习惯就好了。
#15
pangding2010-11-01 20:49
虽然有这种語法,但用的很少。
多半用 typedef 能写的更舒服一点。数组的引用根本不比指针方便,这語法我觉得就是个鸡肋,反正我从来没用过。
#16
2010-11-01 20:50
   这个问题不是很难吧,你学过了,运行结果有不一样的看多两眼就看出来了,
程序就几行,以后有问题都要自己想一下,想不明白了再一起讨论。
#17
脱托2010-11-01 20:52
回复 14楼 pangding
嗯嗯 这样写是对的  这个貌似和指向一维数组数组的指针有点像
#18
weiqiang2010-11-02 12:43
顶一下,二楼的
#19
VenusNefu2010-11-29 13:53
回复 楼主 脱托
程序代码:
#include<iostream>
using namespace std;
int main()
{  int a[3]={1,2,3};
  int *b=a;
  cout<<b<<endl;
   cout<<&a[0]<<endl;
return 0;
}

是不是这个意思
#20
andyandy2010-11-30 14:24

int %b=a[3];
  cout<<&b<<endl;
   cout<<&a[0]<<endl;
改成
int %b=a[0];
  cout<<&b<<endl;
   cout<<&a<<endl;
我刚试了,应该是你要的结果。




[ 本帖最后由 andyandy 于 2010-11-30 14:35 编辑 ]
#21
andyandy2010-11-30 14:38
越界我就不说了。
int %b=a[3];
说明b是一个整数。按你的原意,引用之后,b、a和a[0]的首地址应该相同。

[ 本帖最后由 andyandy 于 2010-11-30 14:39 编辑 ]
1