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

结果 为什么是 101 请详细一点 谢谢
2025-02-23 10:31:52
推荐回答(3个)
回答1:

我们管这个叫”短路“求值

即,if中的这个表达式如果是 exp1 || exp2 ,如果exp1值为1,那不管exp2计不计算整个表达式的值都为1,所以编译器优化后exp2就不计算了
同理exp1 && exp2 如果exp1的值为0 ,exp2也不计算了

此题,++a 大于0 ,因此第二个表达式不计算, ++c也执行了
就是你说的结果

回答2:

++a=1>0为真,即为1,||后面的内容就不用看了,故++b没有执行,仍为b=0;if条件为真,执行++c,故c=1
输出结果为:
1,0,1 而不是101

回答3:

++a>0 a=1,因而该判断正确,由于或关系,无论++b>0是否正确,都不影响if的判断,因而不再计算++b>0,所以b仍然=0;++c后c=1