读书人

gcc跟vc中编译结果不一致更改const的

发布时间: 2012-10-05 15:34:34 作者: rapoo

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的角度看是不一样的。

读书人网 >C语言

热点推荐