在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... 有何不同?
在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... 有何不同?
如评论中所述,您对运算符优先级有疑问。您的代码解释如下:
((a > 1) ? b = 10 : b) = 50;
上面的代码是无效的,原因与写入 (b = 10) = 50
无效的原因相同。
代码可以更清楚地写成:
b = a > 1 ? 10 : 50;
还有它与 if...else... 有何不同?
条件运算符仅适用于作为操作数的表达式。语句可以在正文if
中包含语句。
条件运算符总是可以用等效的if
语句代替。但反之则不然——有些 if 语句不能用等效的条件运算符表达式替换。
您遇到的问题是运算符优先级。运算符的=
优先级低于?:
运算符。
我认为你的代码应该是:
int main()
{
int a=2,b=3;
b=(a>1)?10:50;
printf("%d",b);
return 0;
}
干杯。