有以下程序
#include <iostream>
using namespace std;
int main(void)
{
const int a = 10;
int* p = (int*)(&a);
*p = 20;
cout << "a = " << a << ", *p = " << *p << endl;
return 0;
}
程序运行结果为a = 10,*p = 20
a是常量,自己不能修改自己,但可以通过指针对a所在的空间进行修改,a的空间中存储的值也确实被改为了20。
由于a被const修饰,则a已经是一个常量了,编译器在编译代码时,当遇到获取常量中的内容时,会直接使用常量中的内容替换该常量。就像宏定义替换。
所以输出时,a已经被早先的10替换了,最终输出a = 10,*p = 20