C 为什么会出现左值错误?

C 为什么会出现左值错误?,c,C,我不熟悉C语言。 我对左值错误有疑问。 正如我所理解的,当没有永久地址承载变量来存储右值时,我们会得到一个左值错误。在这里,我可以看到左侧有一个变量。但是,我仍然得到左值错误。 有人能澄清我对左值或运算符的概念吗 #include"stdio.h" void main() { int x=10,a; x<0 ? a = 100 : a = 1000; printf(" %d",a); } #包括“stdio.h” void main() { int x=10,a; x#包括“stdio.

我不熟悉C语言。 我对左值错误有疑问。 正如我所理解的,当没有永久地址承载变量来存储右值时,我们会得到一个左值错误。在这里,我可以看到左侧有一个变量。但是,我仍然得到左值错误。 有人能澄清我对左值或运算符的概念吗

#include"stdio.h"
void main()
{
int x=10,a;
x<0 ? a = 100 : a = 1000;
printf(" %d",a);
}
#包括“stdio.h”
void main()
{
int x=10,a;
x
#包括“stdio.h”
void main(){
int x=10,a;
a=x应该是

a = x < 0 ? 100 : 1000;
a=x<0-100:1000;
赋值比三元运算符的进阶低,所以会弄糟

或者这也行(记住我之前说过的话)

x
左值(定位器值)表示占用内存中某个可识别位置(即具有地址)的对象

让我们举个例子

int var;
var = 4;
赋值要求左值作为其左操作数,
var
是左值,因为它是一个具有可识别内存位置的对象。另一方面,以下内容无效:

4 = var;       // ERROR!
(var + 1) = 4; // ERROR!

常量
4
和表达式
var+1
都不是左值(这使它们成为右值)。它们都不是左值,因为它们都是表达式的临时结果,没有可识别的内存位置(即,在计算期间,它们只能驻留在某个临时寄存器中)因此,分配给它们没有语义上的意义-没有地方可分配。

您可以这样分配值

a = x<0 ? 100 : 1000;

a=x您没有将操作的结果分配回用于存储它的变量。您声明了
int a
,但从未使用过它

a = x < 0 ? 100 : 1000;
a=x<0-100:1000;
另外,作为旁注,赋值
=
的优先级低于三元运算符,因此产生了警告

4 = var;       // ERROR!
(var + 1) = 4; // ERROR!
a = x<0 ? 100 : 1000;
a = x < 0 ? 100 : 1000;