4

GCC Compiler中编译给定程序:

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);

Then 它显示没有编译错误。谁能解释我为什么?
还有它与 if...else... 有何不同?

4

3 回答 3

5

如评论中所述,您对运算符优先级有疑问。您的代码解释如下:

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

上面的代码是无效的,原因与写入 (b = 10) = 50无效的原因相同。

代码可以更清楚地写成:

b = a > 1 ? 10 : 50;

还有它与 if...else... 有何不同?

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

条件运算符总是可以用等效的if语句代替。但反之则不然——有些 if 语句不能用等效的条件运算符表达式替换。

于 2012-08-19T10:00:44.203 回答
2

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

于 2012-08-19T09:53:13.610 回答
2

我认为你的代码应该是:

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

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

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

干杯。

于 2012-08-19T09:56:06.957 回答