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

r.b*_*waj 4 c ternary-operator

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

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


它显示错误"左值作为左操作数需要"
但是如果我写第4行

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

然后它显示没有编译错误.谁能解释一下为什么?
它还有什么不同于......其他......?

Mar*_*ers 5

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

((a > 1) ? b = 10 : b) = 50;
Run Code Online (Sandbox Code Playgroud)

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

代码可以更清楚地写成:

b = a > 1 ? 10 : 50;
Run Code Online (Sandbox Code Playgroud)

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

条件运算符仅适用于表达式作为操作数.一个if语句可以包含的语句在体内.

条件运算符始终可以替换为等效if语句.但反过来却不正确 - 有if语句无法用等效的条件运算符表达式替换.