c++基础--间接修改const的坑
在C++中。
通过指针间接修改全局变量直接在编译器阶段就无法通过,因为全局变量在常量区中,收到保护。
而修改局部变量的时候,编译器可以通过,但是在发生修改的时候,编译器会开辟一块新的内存,创建一个新的 *temp赋值给 *p, 而a的值不会发生改动。所有对const常量取地址的操作都是取到了编译器新开的内存,这片内存复制了原有空间的数据。
int main() {
const int a = 9;
int* p = (int*)(&a);
*p = 10;
cout << "a=" << a <<endl;
cout << "*p=" <<*p <<endl;
/**
结论是:
a=9
*p=10
在修改的时候等价于:
int temp = a;
*p = &temp;
*p = 200;
**/
}
在C语言中:
全局变量与C++一样无法修改,但是通过间接修改的方式,局部变量是可以修改成功的。