阿里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被强制赋值,所以指针有效指向了某个地址,所以出现了上述结果
这句时 没有为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的硬编码值,而不是重新读取内存?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息