关于c++中同一地址存在多个数值的有关问题

关于c++中同一地址存在多个数值的问题
前几天一时兴起,想尝试着在类外面访问私有成员,然后通过指针操作地址的方式搞定了,顿时觉得指针这东西太不和谐了

今天又一时兴起,想尝试着用指针修改const变量的值,然后就写出了这么一个蛋疼的程序
int main(int argc,char* argv[]){
const int a = 1;
int b;
int *c;
b = (int)&a;
c = (int *)b;
*c = 2;

cout << &a << " " << c << endl;
cout << a << " " << *c << endl;

return 0;
}


用c-free写的,mingw5编译器,64位win7系统,运行结果为
0x28ff44 0x28ff44
1 2
神奇的事情出现了,同一个地址冒出了两个不同的数据

然后考虑到变量储存和作用域的情况,尝试着把变量挪到main外面,成为全局变量,然后发现,无论是把a还是c放到main外面,程序运行时都会直接出错,无法像上面这样进行操作
关于c++中同一地址存在多个数值的有关问题

目前在和同学讨论中,暂时没有明确的思路,不知可否有大神来帮我们解惑

------解决方案--------------------
const 本来就不能改的,你偏要去改。。。
不管得出啥解释,都是错的
------解决方案--------------------
C++标准中未定义的部分,具体如何实现,编译器说了算.
研究这么东西是条不归路.
------解决方案--------------------
直接调试看内存或汇编。看看那个地址里到底是1还是2。

google  常量折叠