在 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);
然后它显示没有编译错误。谁能解释一下为什么?
它还有什么不同于......其他......?
答案 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;
}
干杯。