求解释C源码?

[复制链接]
查看11 | 回复4 | 2011-2-23 05:42:13 | 显示全部楼层 |阅读模式
int a=0,b=0,c=0;
if (++a>0&&b++>0)++c;
printf("%d,%d,%d",a,b,c);
运行结果是1,1,0
如果++a>0为真b++>0也是真?而++c为假?
int a=0,b=0,c=0;
if (++a>0&&b++>0)++c;
printf("%d,%d,%d",a,b,c);
运行结果是1,0,1
两个程序c都在括号外,为什么结果不同?
其实我只是想知道if (++a>0&&b++>0)++c;运行结果为什么会是1,1,0

回复

使用道具 举报

千问 | 2011-2-23 05:42:13 | 显示全部楼层
if (++a>0&&b++>0)++c;结果为1,1,0这很明显吧。先从括号里面的开始看++a>0这是正确的,因为a在和0比较前就已经自加变成了1,所以a>0而b++>0 这是错误的,因为b在和0比较的时候,b=0,所以它没有比0大,而在比较之后,b要自加,所以它变成了1所以,if的条件不成立,不执行++c这段代码。所以输出结果是1,1,0你要理解的是,++i 和 i++ 的概念是不一样的。前者是i自加了之后再执行其他,后者是执行了其他运算之后再自加,它们的优先级不同。
回复

使用道具 举报

千问 | 2011-2-23 05:42:13 | 显示全部楼层
取一个字符,但不显示在屏幕上 用getch();会等待你按下任意键,再继续执行下面的语句; return 0;是函数main()的返回值,在你这里,完整的函数头部相当于void main()其中,void表示无返回值,所以你不写return 0是不会影响函数的运行的;如果函数开始写的是 int main()
回复

使用道具 举报

千问 | 2011-2-23 05:42:13 | 显示全部楼层
++a a先加1,然后返回aa++先返回a的当前值,然后a加1所以++a > 0 为真b++ > 0 为假
回复

使用道具 举报

千问 | 2011-2-23 05:42:13 | 显示全部楼层
getch();
函数用途:从控制台读取一个字符,但不显示在屏幕上 用getch();会等待你按下任意键,再继续执行下面的语句; return 0;是函数main()的返回值,在你这里,完整的函数头部相当于void main()其中,void表示无返回值,所以你不写return 0是不会影响函数的运行的;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行