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++一样无法修改,但是通过间接修改的方式,局部变量是可以修改成功的。

posted @ 2020-12-07 15:00  lsxkugou  阅读(137)  评论(0编辑  收藏  举报