| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 401 人关注过本帖
标题:&的问题
取消只看楼主 加入收藏
loveonline
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-8-25
收藏
 问题点数:0 回复次数:2 
&的问题

const int & r ;和const int r ;是不是一样的啊?请高手指点。

2006-08-30 17:17
loveonline
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-8-25
收藏
得分:0 

感谢上面的回答,我前几天也看过函数形参里是这种形式,比如发function(float &a,float &b).

2006-08-30 17:58
loveonline
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-8-25
收藏
得分:0 

我刚查到的资料:



引用经常用于“按引用传递(pass-by-reference)”:

void swap(int& i, int& j)
{
int tmp = i;
i = j;
j = tmp;
}

int main()
{
int x, y;
// ...
swap(x,y);
}
此处的 i 和 j 分别是main中的 x 和 y。换句话说,i 就是 x —— 并非指向 x 的指针,也不是 x 的拷贝,而是 x 本身。对 i 的任何改变同样会影响 x,反之亦然。

OK,这就是作为一个程序员所认知的引用。现在,给你一个不同的角度,这可能会让你更糊涂,那就是引用是如何实现的。典型的情况下,对象 x 的引用 i 是 x 的机器地址。但是,当程序员写 i++ 时,编译器产生增加 x 的代码。更详细的来说,编译器用来寻找 x 的地址位并没有被改变。C 程序员将此认为好像是 C 风格的按指针传递,只是句法不同 (1) 将 & 从调用者移到了被调用者处,(2)消除了*s。换句话说,C 程序员会将 i 看作为宏 (*p),而 p 就是指向 x 的指针(例如,编译器自动地将潜在的指针解除引用;i++被改变为 (*p)++;i = 7 被自动地转变成 *p = 7)。

很重要:请不要将引用看作为指向一个对象的奇异指针,即使引用经常是用汇编语言下的地址来实现的。引用就是对象。不是指向对象的指针,也不是对象的拷贝,就是对象。

2006-08-30 18:00
快速回复:&的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016874 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved