一个小实验可以说明,const常量内存可改变,但不能改在编译期已经定下来的。
const int i = 1000;//声明定义常量
int t = i;//声明定义变量 编译时,它就变成了int t = 1000; 从汇编可以看到这一点
int* p = (int*)&i;//把常量内存地址赋给了p
*p为1000
*p = 10;//我改变了常量的内存地址,下面是不是赋值改变了呢?
//这时的*p为10
t = i;
//不好意思,t还是1000,并不是10,因为在编译时,这里就是 t = 1000,就好象是在编译期用1000替换了i
t = *p; //这时t才改变了。
上面代码并没有什么意义,只是为了更好的了解const,写好这些代码,在VC的调试状态下加断点,中断后进入反汇编
窗口,看这几句代码的汇编,如果了解一点汇编语言相信是很容易看出来,应该有i符号的地方,都被数字1000替换掉了
所以,const常量只是在编译期不可改变,在运行期通过指针可以间接改变常量所在内存的值,但这样做并没有什么实际
意义,除非有人用指针来调用const常量,那你就可以利用这一点做一些坏事儿。