问一道C语言的问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 12:27:43
int x,y,z;
x=y=z=0;
++x||++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
为什么x=1,y=0,z=0?

++x||++y&&++z;
加括号为
(++x)||(++y&&++z);
||有断路的效果,它先计算(++x)的值,发现是1,为真,就没有必要算后面一部分了,因为不论后面一部分是真还是假都没关系,整个结果为真。所以C语言规定||从左到右计算,而且有断路的效果。

||
这个是或运算
前面++x先加再运算,x已经为1了
所以||后面就不运算了
直接跳到下一句
所有结果如上

你可以试试
++y||++x&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
结果是不是 x=0,y=1,z=0

在++x||++y&&++z;中,++x后,整个式子的值已经确定了,所以后面的++y以及++z就不再计算,所以x=0,y=z=0

这是由于短路求值引起的,请参考百科词条:

http://baike.baidu.com/view/1083418.html

++x||++y&&++z;
因为用的是||,
++y和++z不会被执行!