void calculate(){
int x=3, y=3, z=1;
printf("%d\n",z+=x<y ? 10:20 );
}
以上代码打印21。
我理解,首先,该程序将评估x&lt; y =&gt; 0,则z = z + 0 = 1,程序不应打印10,因为1是另一种形式的真。
该程序明确选择了第二个选项,它也将其增加到21,有人可以解释一下吗?
答案 0 :(得分: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
答案 1 :(得分:3)
首先,它评估x小于y。由于x = 3且y = 3,这是假的,因此它的计算结果为20。
由于z已经= 1,你要加20:
z += 20
z = z + 20
z = 1 + 20