const常量和指针有关问题

const常量和指针问题!
#include <iostream>
using namespace std;

int main(void) {
const int a = 5;
int* ptr = (int*)&a;
cout << "改变前a: " << a << endl;
cout << "改变前 *ptr: " << *ptr << endl;
cout << "***********************\n";
*ptr = -30;
cout << "改变后a: " << a << endl;
cout << "改变后 *ptr: " << *ptr << endl;


system("pause");
}

运行结果:
const常量和指针有关问题
调试信息:
const常量和指针有关问题
为什么运行结果的a还是5呢???明明a在内存中已经变成-30了
------解决思路----------------------
a 为什么是 5 呢?  或许是因为 编译器 把 

const int a = 5; 

变成了

#define a 5

你知道怎么回事了吧!

你可以const一个struct ,看看编译器是否够聪明
------解决思路----------------------
C++和C的不同,C语言里你这么写a是会变的,对待a和平常变量没差,只不过要求a在程序内不可变,但是指针方法走了它路。C++里将a写入符号表,在程序运行的时候,在其作用域看到a就替换成符号表里的值,此时它已与前面定义时分配的地址无关。