看一个你意想不到的小程序

aa279686030 2010-08-10 11:19:47
看完后大家不要看下面的结构,想一下在做决定 !!!

#include <stdio.h>
int main()
{
int i;
i = 10;
printf("i : %d\n",i);
printf("sizeof(i++) is: %d\n",sizeof(i++));
printf("i : %d\n",i);
return 0;
}




参考答案:如果你觉得输出分别是,10,4,11,那么你就错了,错在了第三个,第一个是10没有什么问题,第二个是4,也没有什么问题,因为是32位机上一个int有4个字节。但是第三个为什么输出的不是11呢?居然还是10?原因是,sizeof不是一个函数,是一个操作符,其求i++的类型的size,这是一件可以在程序运行前(编译时)完全的事情,所以,sizeof(i++)直接就被4给取代了,在运行时也就不会有了i++这个表达式。

该程序是一位名人的博客上的一段,贴出来给大家看看 !
小弟对它的参考答案理解的不是很清楚 ,所以有哪位大侠能说详细点?
谢谢了大侠们赏脸了,看不懂的就增长哈见识,看得懂的大侠们详细 道来给菜鸟们听听 !!
...全文
511 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobo364 2010-08-11
  • 打赏
  • 举报
回复
还有这样的一回事,学习了。
密斯刘 2010-08-11
  • 打赏
  • 举报
回复
牛逼啊 学习了 说明sizeof的处理发生在编译期间而不是运行期间
mooneclipse 2010-08-11
  • 打赏
  • 举报
回复
学习了.........
csdayu 2010-08-11
  • 打赏
  • 举报
回复
强大,学习学习。
soccerismylife 2010-08-11
  • 打赏
  • 举报
回复
有点意思
LENOVO_ 2010-08-11
  • 打赏
  • 举报
回复
长见识了,多谢分享。
多喝水ooo 2010-08-11
  • 打赏
  • 举报
回复
不错不错,醍醐灌顶。。
wlmjxj 2010-08-11
  • 打赏
  • 举报
回复
studying ,studying
zhengjiankang 2010-08-11
  • 打赏
  • 举报
回复
不要在代码上面玩这种伎俩偷懒
想做i++操作就乖乖的单独写
清晰明了不会出错
不要以为少写一行运行就快一点
screwzm 2010-08-11
  • 打赏
  • 举报
回复
MARK
好帖。。。
qifeifei 2010-08-11
  • 打赏
  • 举报
回复
学习了,。
huaxiamoyun 2010-08-11
  • 打赏
  • 举报
回复
好东西啊 学习学习
allen19830814 2010-08-11
  • 打赏
  • 举报
回复
不能被外表麻痹啊!
waterpg 2010-08-11
  • 打赏
  • 举报
回复
学习了
kevin07042034 2010-08-11
  • 打赏
  • 举报
回复
sizeof表达式的值在编译的时候就已经被确定了,编译器将使用该表达式的结果代替具体的表达式,而在程序运行的时候,该值将被当作一个常量。 就是在运行的时候sizeof(i++)就是一个常量了。
joan_jin 2010-08-11
  • 打赏
  • 举报
回复
sizeof()长得像函数,但是不是函数。呵呵
黑泡泡选手 2010-08-11
  • 打赏
  • 举报
回复
不错,容易忽略的一个问题!
wang1365 2010-08-11
  • 打赏
  • 举报
回复
学习 学习
fengers139 2010-08-11
  • 打赏
  • 举报
回复
学习了
kingstarer 2010-08-10
  • 打赏
  • 举报
回复
编译器这种优化是不是真让人郁闷

明明就是想要执行i++的 但居然被优化掉了
加载更多回复(23)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧