#include<stdio.h> int main() { const int i=0; int *j=(int *)&i; *j=1; printf("%d,%d\n",i,*j); return 0; }
windows平台
1.在 .c 文件中输出是 1,1 ,深究原因是因为 const 在.c文件中定义的变量是只读的但是还是个变量 ,不可以显示更改如 i=1,但是可以通过地址间接进行更改
2.在 .cpp 文件中 输出是 0,1 ,深究原因是因为 const 在.cpp文件中定义的变量在预编译时就已经用 0 把 i 替换,因为编译器优化了,认为所有符号 i 都是 0,虽然在编译时为变量分配内存,但是如何间接直接改变都不会影响输出结果
LINUX 平台
与 WINDOWS平台结果一致
再看底下这个程序
#include<stdio.h> int main() { volatile const int i=0; int *j=(int *)&i; *j=1; i=1; printf("%d,%d\n",i,*j); return 0; }
windows平台
1.在 .c 文件中输出是 1,1 volatile 在.C基本只是让编译器减少优化,这里是消除const,值是在.c
文件里体现的不明显
2.在 .cpp 文件中 输出是 1,1 volatile 在.C基本只是让编译器减少优化,这里是消除const,从而使变量 i可以被修改
LINUX 平台
与 WINDOWS平台结果一致
原文:http://blog.csdn.net/kai8wei/article/details/44574163