C中棘手的三元操作

tut*_*ike 3 c ternary-operator

 void calculate(){

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

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

 }
Run Code Online (Sandbox Code Playgroud)

上面的代码打印21.

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

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

oua*_*uah 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

  • @kotlomoy首先,你不明白"虚假信息"这个词是什么意思,其次你不了解自己的引用.您是否懒得阅读ouah的引文,语言标准或C优先级的任何其他来源,所有这些都确认条件运算符的优先级高于赋值? (2认同)
  • 请注意,kotlomoy的链接是一个C++问题,但这是一个C问题.值得注意的是,你不能在C中使用三元左值表达式. (2认同)