在表达式中使用括号,包括三元运算符
可能重复:
错误:这个简单的C代码需要左值? (三元有任务吗?)
在下面的代码中,我得到了一个错误,例如“ lvalue required as left operand of assignment
”。 我无法理解为什么会报告这样的错误。 但是当我在表达式中使用括号如(i>j)?(k=i):(k=j)
它没有报告错误。 请解释。
int main() { int i = 2; int j = 9; int k; (i>j) ? k=i : k=j; printf("%d\n",k); return 0; }
很明显,这种情况可以用更好的方式重写,但是由于=
和?:
运算符的优先级,可以观察到你的问题。
赋值运算符?:
具有比=
更高的优先级,因此表达式
( i > j ) ? k = i : k = j;
相当于
(( i > j ) ? k = i : k) = j;
哪个不正确,因为您无法分配表达式结果。
实际上,这种情况类似于(( i > j ) : i : j) = 10;
这也不正确。
没有你的extra()s,我认为运算符优先级是将其分组为
((i>j)?k=i:k)=j;
这显然不是你想要的,并且确实有左值问题。
修复它
k= (i>j) ? i : j;
写这样的怎么样
int main() { int i,j,k; i=2;j=9; k = (i > j) ? i : j; printf("%d\n",k); return 0; }
相反:
k = i > j ? i : j;
您需要指定此运算符的返回值。 三元运算符的语法如下:
result = condition ? first_expression : second_expression;
你在代码中遗漏了..所以你可以简单地把它放在下面..
int k = (i > j) ? i : j;