测试强行用指针修改const变量底层发生的变化。
#include<bits/stdc++.h>
using namespace std;
int main(){
const int a = 2;
cout<<&a<<endl;
int *p = (int*)&a;
*p = 3;
cout<<"二者的地址"<<endl;
cout<<&a<<endl<<p<<endl;
cout<<"二者的值:"<<endl;
cout<<a<<endl<<*p<<endl;
return 0;
}
为什么取址相同的情况下,取值不同?
因为你定义为常量,所以编译器直接把用到a的地方替换成了常量值2,你可以汇编一下看看,以上是我猜的,我只是个java程序员😁
变量和常量的存储位置不同。常量区数据不允许改变,在通过指针赋值的时候被拒绝了。