3
 void calculate(){

  int x=3, y=3, z=1;

  printf("%d\n",z+=x<y ? 10:20 );

 }

上面的代码打印 21。

我明白,首先,程序将评估 x < y => 0,然后 z = z + 0 = 1,程序不应该打印 10,因为 1 是另一种形式的真。

该程序明确选择了第二个选项,并且还将其增加到 21,有人可以解释一下吗?

4

2 回答 2

12

条件运算符的优先级高于赋值运算符。

z+=x<y ? 10:20

被评估为

z+= (x<y ? 10:20)

您可以在此处获得 C 运算符优先级的摘要:

http://www.kernel.org/doc/man-pages/online/pages/man7/operator.7.html

于 2013-05-18T11:55:28.287 回答
3

首先它评估 x 小于 y。由于 x = 3 和 y = 3,这是错误的,因此它的计算结果为 20。

由于 z 已经 = 1,因此您要向其添加 20:

z += 20

z = z + 20

z = 1 + 20

于 2013-05-18T11:55:43.387 回答