运算符优先级和三元运算符

我在C有问题

#include int main() { int a = 10, b = 0, c = 7; if (a ? b : c == 0) printf("1"); else if (c = c || a && b) printf("2"); return 0; } 

这段代码打印2,但我认为?b:c返回b = 0和0 == 0返回1.你能解释一下代码吗?

您的条件写得不好。

在第一个if语句中:

  if (a ? b : c == 0) 

如果你把这些值,那就变成了

 if(10 ? 0 : 7 == 0) 

意味着,它将始终返回0。

这就是控制进入其他部分的原因,它变成了

 else if (7 = 7 || 10 && 0) 

既然你在这里使用了“=”运算符(c = c),它将永远为真,因此它会打印“2”。

现在您希望代码返回“1”,然后以这种方式更改您的if语句。

  if( (a ? b:c) == 0){...} 

因为“==”运算符的优先级高于三元运算符。

条件运算符( ?: :)具有最低优先级之一。 特别是它低于== 。 你的陈述意味着:

 if(a ? b : (c == 0)) { ... } 

不是这个:

 if((a ? b : c) == 0) { ... }