c中三元运算符(?:)的概念

时间:2012-08-19 09:51:53

标签: c ternary-operator

GCC编译器中编译给定程序时:

int main()  
{  
      int a=2,b=3;  
      (a>1)?b=10:b=50;  
      printf("%d",b);  
      return 0;     
}


它显示错误“左值作为左操作数需要”
但如果我将第4行写为
(a>1)?b=10:(b=50);
 然后它显示没有编译错误。谁能解释一下为什么?
它还有什么不同于......其他......?

3 个答案:

答案 0 :(得分:5)

正如评论中所提到的,运营商优先级存在问题。您的代码解释如下:

((a > 1) ? b = 10 : b) = 50;

上述代码无效,原因与撰写(b = 10) = 50无效相同。

代码可以更清楚地写成:

b = a > 1 ? 10 : 50;
  

还有什么不同于......其他......?

条件运算符仅适用于表达式作为操作数。 if语句可以在正文中包含语句

条件运算符始终可以替换为等效的if语句。但反之则不然 - 有if语句无法用等效的条件运算符表达式替换。

答案 1 :(得分:2)

您遇到的问题是运营商优先级。 =运算符的优先级低于?:运算符。

答案 2 :(得分:2)

我认为你的代码应该是:

int main()  
{  
      int a=2,b=3; 

      b=(a>1)?10:50; 

      printf("%d",b);  
      return 0;     
}

干杯。