c - C 中棘手的三元运算符

标签 c ternary-operator

 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/

相关文章:

c - 在 C 中直接传递变量地址和传递指针(指向同一变量)之间的区别?

Razor 三元表达式中的 HTML 文字

c# - 是否可以从 C# 中的对象修改或删除匿名类型?

meteor - Meteor 中的三元运算符

java - 字符串中的三元运算符

java - 条件(三元)运算符代码风格

c - 为指向结构体数组的指针分配内存

c++ - 新分配太多内存

c - 如何从 C 中的 WBC 文件中提取图片?

c - 为什么我的 Windows 程序试图调用 main() 而不是 WinMain()?