Ana*_*sak 2 c conditional-operator lvalue
#include <stdio.h>
int main(void){
int n = 0, y = 1;
y == 1 ? n = 0 : n = 1;
if (n)
printf("YES");
else
printf("NO");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么带有三元运算符的行会lvalue出错。我对什么有一个非常抽象的概念lvalue。让我给出我的抽象,如果我错了,请纠正我。lvalue通常是地址,或者我们可以说我们存储常量值的变量,变量或常量的值是 a rvalue。但我不明白为什么lvalue三元运算符的赋值部分会出现错误,其中指出n = 0 : n = 1. 如果我能够正确理解我的代码出了什么问题,那将会非常有帮助。
三元运算符的?:优先级高于赋值运算符=。所以你的表达式解析为:
(y == 1 ? n = 0 : n) = 1;
Run Code Online (Sandbox Code Playgroud)
这为您提供了赋值左侧的表达式,该表达式不是左值,因此不可赋值。
三元运算符的计算结果为第二部分的值或第三部分的值,这些值是您要分配给 的值n,因此您可以将其写为:
n = y == 1 ? 0 : 1;
Run Code Online (Sandbox Code Playgroud)
或者您可以反转条件并完全摆脱三元:
n = y != 1;
Run Code Online (Sandbox Code Playgroud)