【发布时间】:2017-03-16 06:45:22
【问题描述】:
我是 C 新手,今天我学会了“?”运算符,它是 if-else 语句的短类型。但是,当我执行此代码时:
int b;
int x;
b=3<2?x=12:x=34;
我收到一个错误“错误:需要左值作为赋值的左操作数”。我不明白为什么会这样。我认为的过程是程序首先将 34 分配给 x,然后将 x 的值(即 34)分配给 b。 另一方面,我可以将语句用作
int b;
int x;
b=3<2?x=12:(x=34);
没有任何错误。我看了看我的书,但没有任何帮助。为什么我不能使用第一个语句?我的电脑想做什么? 谢谢...
【问题讨论】:
-
可能是运算符优先级?
-
如果您想在
x中产生副作用,并将该值分配给b,您需要在both 备用表达式周围加上括号。b = 3 < 2 ? (x=12) : (x=34);尝试在该三元运算符后添加printf("%d %d\n", b, x);。 -
"if-else 的短类型" - 可以miss这样使用,是的。但是别想了!并在这些运算符周围使用空格。你的代码应该做什么?看起来你还没有真正理解条件运算符的作用。
-
仍然,我回答但删除了,因为运算符优先级不是这里的原因:“条件运算符中间的表达式(在?和:之间)被解析为括号:它的优先级相对于? : 被忽略”。所以如果它被解析为好像带括号为什么它需要括号(我同意构造不是很好,这不是 if else 而是三元运算符)
-
编译器能否评估为
b = (3<2?x=12:x) = 34;这可以解释“需要左值”错误。
标签: c assignment-operator conditional-operator lvalue