中易网

阿里C++笔试题:const int a = 10;int * p = (int *)(&a);*p=20; 为什么结果是a=10,*p=20?

答案:3  悬赏:30  
解决时间 2021-01-13 01:42
  • 提问者网友:最美的风景
  • 2021-01-12 15:02
阿里C++笔试题:const int a = 10;int * p = (int *)(&a);*p=20; 为什么结果是a=10,*p=20?
最佳答案
  • 二级知识专家网友:执傲
  • 2021-01-12 15:32
编译器优化的结果,编译器在处理 const int a = 10;
这句时 没有为a分配内存赋值,而是在加入了符号表,后续引用a时有些类似#define a 10这样处理了
int * p = (int *)(&a);这句则 配*p被强制赋值,所以指针有效指向了某个地址,所以出现了上述结果
全部回答
  • 1楼网友:傲气稳了全场
  • 2021-01-12 17:33
同问,,,,,
  • 2楼网友:拾荒鲤
  • 2021-01-12 16:35
在vs2010 debug状态下跟踪,值都是20.可能是因为编译器优化,导致直接使用a的硬编码值,而不是重新读取内存?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息