为什么我会收到lValue错误?

Yas*_*shi 2 c

我是C语言的新手.我对左值误差有疑问.据我所知,当没有存储Rvalue的permanent-address-bearing-variable时,我们得到一个左值错误.在这里,我可以在左侧看到一个变量.但是,我仍然得到左值误差.有人可以清楚我的左值或使用的运算符的概念.

#include"stdio.h"
void main()
{
int x=10,a;
x<0 ? a = 100 : a = 1000;
printf(" %d",a);
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

use*_*738 7

这将是

a = x < 0 ? 100 : 1000;
Run Code Online (Sandbox Code Playgroud)

赋值比三元运算符具有更低的优先级,因此它会混乱.

或者这也可行(请记住我之前说的)

x<0 ? (a = 100) : (a = 1000);
Run Code Online (Sandbox Code Playgroud)

编译器如何看待你的?

((x<0) ? a = 100 : a) = 1000;
Run Code Online (Sandbox Code Playgroud)

现在很清楚为什么编译器抱怨lvalue.(三元运算符生成一个rvalue和赋值运算符期望左边的左值)是不是?