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

下列代码给出输出结果:
#include"stdafx.h"
#include <iostream>
#include "stdlib.h"

using namespace std;
int main(void)
{
const int a = 10;
int * p = (int *)(&a);
*p = 20;
cout << "a = " << a << ", *p = " << *p << endl;
cout << &a << endl << p << endl; //本人测试时添加的
system("pause");
return 0;

}
运行结果如下:

编译器优化的结果,编译器在处理 const int a = 10;
这句时 没有为a分配内存赋值,而是在加入了符号表,后续引用a时有些类似#define a 10这样处理了
int * p = (int *)(&a);这句则 配*p被强制赋值,所以指针有效指向了某个地址,所以出现了上述结果
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-03
在vs2010 debug状态下跟踪,值都是20.可能是因为编译器优化,导致直接使用a的硬编码值,而不是重新读取内存?本回答被提问者采纳
第2个回答  2015-04-03
同问,,,,,
相似回答