int main(){
const int a = 2;
int* p = (int*)&a;
*p = 3;
printf("a=%d *p=%d\n", a, *p);
return 0;
}
gcc/cl 以c编译:输出 a=3 *p=3
g++/cl 以c++编译:输出 a=2 *p=3
你在定义的时候i已经是常量且赋值了,在编译过程中 i的值相当于被替换成1,所以在程序执行过程中 i始终为1;
而你在int *p=(int *)&i; *p=100;改变了p指向i这块内存空间的值,但是编译器是不会去读取这块内存中的值的;
如果在C++的源码中将a声明为const volatile int a= 1;其输出就和c的一样了