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

新手求助!关于引用的一个简单问题

shyshit 发布于 2009-08-17 11:34, 496 次点击
二级C++考试辅导书上有一段这样的编码:
int main()
{
    int i=5;
    int &r=i;r=7;
    cout<<i<<endl;
    return 0;
}
第二句不是把i的值赋给r的地址了吗?最后i为什么是7呢?希望明白的人讲解一下!
7 回复
#2
hyfl2009-08-17 14:09
引用只是变量的另外一个名字而已,其实是一个东西。
在代码里给r赋值为7,就是把7赋值给了i。
#3
shyshit2009-08-17 15:41
回复 2楼 hyfl

那跟:
  int i=5,r=7;
  int i=r;
是一回事吗?
#4
hyfl2009-08-17 19:56
回复 3楼 shyshit

不一样,int i = 5, r = 7;
这样是声明了两个变量,它们在内存里的地址是不同的。

而且 int i = r;这个地方会有重复声明的错误,因为i已经声明过了。

引用可以理解为指针,int &r = i; 那么r就是指向了i的地址。但是和指针有区别。
#5
明次2009-08-17 20:17
看来LZ还不清楚引用。其实引用就是别名。
 &r=i  //这句就是r就是i的别名。你可以这样理解,虽然他们的名字不同,但他们都是同一个人。
 你给 r赋值就相当于给i赋值,因为他们是同一个“人”,只是名字不同而已罢了。
#6
XIAO荣2009-08-18 11:07
如果LZ有学过汇编的话,这个就容易懂了。
int &r=i;//数据i是存放在内存中的,这样子r就是数据i在内存中的地址,类似指针。
r=7;//数据i的地址r的指向内容本来是i的数值5的,但是现在把r指向的内容有赋值为7了。
结果i也就变为7了。
#7
easycpp2009-08-18 13:58
引用不是指针,也不是地址
应该这么说,i与r其实是一个对象,它们对应的数据是同一份。关于这个问题,我已经放到我维护的一个FAQ上了。大家可以过去看看:[url="http://www.]C++ 问题集[/url]

[ 本帖最后由 easycpp 于 2009-8-18 14:03 编辑 ]
#8
王晓明2009-08-18 14:24
引用是一个变量的别名,在这里其实i和r是同一个内存单元的名字,可以通过i或r来改变这个内存单元中的内容。输出的i其实是这个内存单元中的内容。
1