鱼C论坛

 找回密码
 立即注册
查看: 1458|回复: 6

[已解决]C++引用赋值后地址问题,求大佬们help qwq十分感谢

[复制链接]
发表于 2023-2-12 10:59:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int x=10,y=20;
  6.         int &r=x;
  7.         cout<<r<<endl;
  8.         printf("r=%p \n",r);
  9.                 printf("x=%p \n",x);
  10.                         printf("y=%p \n",y);
  11.         r=y;
  12.                 printf("r=%p \n",r);
  13.                         printf("y=%p \n",y);
  14.         cout<<r;
  15.         return 0;
  16. }
复制代码


在r=y之后,r的地址居然变成y的地址了,但是看教材上说r和x绑定了的,按理来说,y只应该把y的值赋给r吧?地址为啥变了qwq
最佳答案
2023-2-12 11:23:50
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int x=10,y=20;
  6.         int &r=x;
  7.         cout<<r<<endl;
  8.         printf("r=%p \n",&r);
  9.                 printf("x=%p \n",&x);
  10.                         printf("y=%p \n",&y);
  11.         r=y;
  12.                 printf("r=%p \n",&r);
  13.                         printf("y=%p \n",&y);
  14.         cout<<r;
  15.         return 0;
  16. }
复制代码


你告诉我我俩的代码有什么区别?

谁说打印地址是这么打印的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-12 11:05:00 From FishC Mobile | 显示全部楼层
从哪里看到地址变了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-12 11:10:36 | 显示全部楼层
dolly_yos2 发表于 2023-2-12 11:05
从哪里看到地址变了?
  1. 10
  2. r=000000000000000a
  3. x=000000000000000a
  4. y=0000000000000014
  5. r=0000000000000014
  6. y=0000000000000014
  7. 20
复制代码

这是输出的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-12 11:23:50 | 显示全部楼层    本楼为最佳答案   
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int x=10,y=20;
  6.         int &r=x;
  7.         cout<<r<<endl;
  8.         printf("r=%p \n",&r);
  9.                 printf("x=%p \n",&x);
  10.                         printf("y=%p \n",&y);
  11.         r=y;
  12.                 printf("r=%p \n",&r);
  13.                         printf("y=%p \n",&y);
  14.         cout<<r;
  15.         return 0;
  16. }
复制代码


你告诉我我俩的代码有什么区别?

谁说打印地址是这么打印的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-12 11:25:38 | 显示全部楼层
000000000000000a
看到这样的数就应该反应过来这不是地址,地址哪有这么整整齐齐的
就算是地址,也轮不到我们用这样的地址,前边的都是操作系统用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-12 11:34:51 | 显示全部楼层
洋洋痒 发表于 2023-2-12 11:25
000000000000000a
看到这样的数就应该反应过来这不是地址,地址哪有这么整整齐齐的
就算是地址,也轮不到 ...

懂了懂了,十分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-12 11:36:04 From FishC Mobile | 显示全部楼层
zwj.123 发表于 2023-2-12 11:10
这是输出的结果

这样传递给 printf 的可是 r 存储的值,即使 printf 把它当地址按地址格式打印也只是因为 %p 的指示,要获取地址就看看 std::addressof 吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 23:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表