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 是 true 的另一种形式。
程序显然选择了第二个选项,并将其递增到 21,有人可以解释一下吗?
最佳答案
条件运算符的优先级高于赋值运算符。
z+=x<y ? 10:20
被评估为
z+= (x<y ? 10:20)
您可以在此处获得 C 运算符优先级的摘要:
http://www.kernel.org/doc/man-pages/online/pages/man7/operator.7.html
关于c - C 中棘手的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16623944/