gcc和vc中编译结果不一致,更改const的值
#include <stdio.h>
typedef struct {
int i;
int j;
} st;
int main()
{
const int n = 9;
int *p = (int *)&n;
printf("%d\n", n);
*p = 5;
printf("%d\n", n);
const st t1 = {1, 2};
st *t2 = (st *)&t1;
printf("%d, %d\n", t1.i, t1.j);
t2->i = 3;
t2->j = 4;
printf("%d, %d\n", t1.i, t1.j);
return 0;
}
这上面的代码gcc和vc当中编译结果不一致,求大神解释啊
[解决办法]
C里面的const是可以通过指针来改变内容的,C++则不可以!
VC默认的是C++编译器,gcc是C编译器
[解决办法]
结构体的那部分没看。但是n和*p那部分,vc和gcc运行结果是一样的。
实际上n也变成了5.但是一切使用n的表达式都是用的n=9.有点匪夷所思。编译器在另外什么什么别的地方保存了n的原值呢?
不过出现这个结果而没有报错,我觉得也可以理解。从p的角度和从n的角度看是不一样的。