解释c程序的输出

时间:2012-07-02 04:20:43

标签: c

#include<stdio.h>
void main(){

int x,y,z;
x=y=z=1;
z=++x||++y&&++z;
printf("%d %d %d \n",x,y,z);
getch();
}

输出为2 1 1!我无法理解......如果我们按操作符的优先顺序进行操作,则无法解释。请帮忙

5 个答案:

答案 0 :(得分:6)

逻辑or||)引入了一个序列点。它的左侧被评估。然后,当且仅当它产生0 /假时,才评估右侧。

在这种情况下,++x出现为2,因此永远不会评估右侧。反过来,这意味着yz仍为1

答案 1 :(得分:3)

||运算符短路。首先计算左侧操作数,如果计算结果为非零,则从不计算右侧操作数。这也可以防止评估右操作数的副作用。

答案 2 :(得分:1)

使用||时运算符,如果LHS证明是真的,那么最终结果是正确的。因此,它确实是++ x,结果是1,最终结果是++ x = 2,z = 1&amp; y = 1

答案 3 :(得分:1)

布尔||短路。这是一旦它找到一个真正的价值,它就会停止评估。因此,z赋值x中发生的所有情况都会增加,z会设置为1然后

答案 4 :(得分:0)

以上答案的附录:

在C / C ++中,这些运算符是短路运算符,即&#39;&amp;&amp;&#;;&#39; ||&#39;和&#39;?&#39;(条件运算符)。

帮自己一个忙,看看这个excellent wiki page on Short-circuit evaluation。 不要错过文章的Common usage部分。