69,368
社区成员
发帖
与我相关
我的任务
分享
const int i=10;
int & ir=(int&)i;
ir=5;
printf("%d %d %d %d\n",ir,i,&ir,&i);
输出之后发现ir和i的地址是一样的,但ir输出5,i输出10,这是为什么
//ir是对i的一个引用,即10;
//由于ir是个变量,并没有用const修饰,当然可以改变它的值了,所以在执行完ir=5;
//ir的值是5。
const int i=10;
002B13BE mov dword ptr [i],0Ah //i的值
int & ir=(int&)i;
002B13C5 lea eax,[i]
002B13C8 mov dword ptr [ir],eax
ir=5;
002B13CB mov eax,dword ptr [ir]
002B13CE mov dword ptr [eax],5
printf("%d %d %d %d\n",ir,i,&ir,&i);
002B13D4 mov esi,esp
002B13D6 lea eax,[i]
002B13D9 push eax
002B13DA mov ecx,dword ptr [ir] //输出了ir
002B13DD push ecx
002B13DE push 0Ah //这里没有输出i中修改过的值,因为编译器给优化了
002B13E0 mov edx,dword ptr [ir]
002B13E3 mov eax,dword ptr [edx]
002B13E5 push eax
002B13E6 push offset string "%d %d\n" (2B7930h)
002B13EB call dword ptr [__imp__printf (2BA2B8h)]
002B13F1 add esp,14h
002B13F4 cmp esi,esp
002B13F6 call @ILT+300(__RTC_CheckEsp) (2B1131h)
return 0;