Chinaunix首页 | 论坛 | 博客
  • 博客访问: 196563
  • 博文数量: 67
  • 博客积分: 2720
  • 博客等级: 少校
  • 技术积分: 625
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-05 13:53
文章分类
文章存档

2011年(1)

2010年(43)

2009年(23)

我的朋友

分类: C/C++

2010-06-19 22:18:10

# include <stdio.h>
main()
{int a,b,c;
a=b=c=0;
printf("%d,%d,%d,%d",a,b,c,a++&&b++||c++);
}


这段小程序的输出结果为1010

原因如下:

首先printf的运算顺序是从右到左的,因此先运算a++&&b++||c++,&&和||有一个特点,就是可以保证执行顺序严格从左至右(+,-等运算无此功能),因此先a++,但a为0,编译器是个懒鬼,每当他见&&操作符第一个操作数就是0时,则不进行&&后面的比较,因此b++忽略,执行到这里a为1,b为0,然后编译器执行c++(注意是||完成后++才生效),由于&&,||之前a,b,c皆为0,故逻辑运算的结果为0,逻辑运算结束后a为1,b为0,c为1,先输出a++&&b++||c++的结果0,然后输出c,b,a(在buffer中),从buffer出来顺序相反,故最终结果为1010

阅读(807) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~