C++中,为什么输出的值不一样(如图)cout<<" r的内存地址:\t\t"<<&r<<endl;

 我来答
百度网友05ca588
2013-07-26 · 超过19用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:48.8万
展开全部
int *&r 定义了一个指针的引用,引用就是别名,对引用进行操作就是对实体本身进行操作,这点在传参的时候能感受得到。
那么r就是指向开辟新空间的一个指针引用,也就相当于指针本身。*r是取指针指向的空间值;r是指针,即就是开辟的空间的地址;r是指针,&r就是指针的地址,即指针的指针,即存储指针的那片内存的地址(而不是指针指向的地址);那么*&r就是存储指针的那片内存的地址里边的内容,即开辟空间的地址。& 这个符号在声明的时候是引用,在其他地方就是取地址符号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
糖二灰
2013-07-26 · TA获得超过3940个赞
知道小有建树答主
回答量:1052
采纳率:75%
帮助的人:1043万
展开全部
int *&r ;
这种形式是指针的引用形式,
就是说r是一个指针变量的别名,在这里r就是一个整形指针变量的别名,
因为int *&r = new int ;
这里new int就是在堆区分配一个int类型大小的空间,并返回这个空间的整形指针,
这里的new int返回的指针没有命名,可以看成一个隐藏类型的指针,如果把上边这一句拆开,
就是如下这样的
int *p = new int;
int *(&r) = p;
上边是把这个隐藏指针还原成p,这样可以更好的理解,你参考引用类型的定义说明
所以后边的就很好解释了,
*r = 6;因为r是p的别名,这句话就是*p = 6;
所以第一条输出 *r = *p = 6;

第二条输出是r,因为引用类型只是一个别名,事实上是不存在这个变量的地址的,所有出现p的地方都可以用r来代替,r就是p,这里输出r就是输出指针p,所以001477D8就是指针p中存储的值。(指针变量存储的都是一个地址值,6是001477D8这个地址存储的值)

第三条输出*&r,也就是*&p,(这里的&不是引用的意思,&只有在定义变量的时候才有引用的意思,这里的&是取地址),就是先取p的地址,然后再取这个地址的指向,其实也就是p,所以输出仍然是001477D8。

第四条输出&r,也就是&p,这里的&还是取地址的意思,也就是取p的地址,所以这个值不是001477D8了,是指向001477D8的值,也就是002FF678这个地址的变量。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式