首页 > 其他 > 详细

对于一个程序的思考1

时间:2015-03-24 09:17:26      阅读:147      评论:0      收藏:0      [点我收藏+]


#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平台结果一致


    

对于一个程序的思考1

原文:http://blog.csdn.net/kai8wei/article/details/44574163

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!