有以下程序
#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
本文解释了一个C++程序如何通过常量指针改变常量a的值,尽管常量本身不可修改,但可以修改其指向的内存空间。编译器在编译时处理常量替换的过程也被详细阐述。
708

被折叠的 条评论
为什么被折叠?



