#include <iostream>
#include <stdlib.h>
using namespace std;
void main() {
const int a = 5;
*(int*)&a = 4;
cout << "是否有地址&a: " << &a << endl << endl;
cout << "内存的值是否修改*(int*)&a: " << *(int*)&a << endl << endl;
cout << "符号是否变化a: " << a << endl << endl;
cout << "解释一下:" << "const int a在编译时期符号a就全部被替换成了5,所以即使用强转指针修改内存也不会改变符号a的值,这是常量折叠导致的!" << endl;
system("pause");
}
#include <stdlib.h>
using namespace std;
void main() {
const int a = 5;
*(int*)&a = 4;
cout << "是否有地址&a: " << &a << endl << endl;
cout << "内存的值是否修改*(int*)&a: " << *(int*)&a << endl << endl;
cout << "符号是否变化a: " << a << endl << endl;
cout << "解释一下:" << "const int a在编译时期符号a就全部被替换成了5,所以即使用强转指针修改内存也不会改变符号a的值,这是常量折叠导致的!" << endl;
system("pause");
}
在VC6.0中甚至可以直接对对象a直接进行(int)a强转内存空间类型的操作直接修改对象a的值,可见const修饰的对象是分配过内存空间的,但是在编译过后通过常量折叠的方法直接把符号a对应位置的内容全部替换为了初始化时的值,所以修改内存改变不了符号a的值!