const的运用

Shan_Ai_Ni 2012-10-02 01:16:01
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,这是为什么
...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-10-02
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
漫步者、 2012-10-02
  • 打赏
  • 举报
回复

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。
rocenting 2012-10-02
  • 打赏
  • 举报
回复
呵呵,~~~~~~~~~~~·····
huangxy10 2012-10-02
  • 打赏
  • 举报
回复
编译器提前将所有的i替换成了10,所以i被修改之后没有被输出出来,其实i已经被改为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;

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧