为什么左值作为增量操作数需要错误在 a = b +(++ c ++); ?
只是希望同时将'b +(c + 1)'分配给'a'并将'C'增加2。
我是初学者刚想要了解“LVALUE ERROR”究竟是什么?
main()
{
int a=1,b=5,c=3;
a=b+(++c++);
printf("a=%d b= %d c= %d \n",a,b,c);
}
答案 0 :(得分:7)
Postfix增量绑定比前缀增量更紧密,所以你想要的是:
a = b + (++c)++;
这不是合法的C,因为前缀增量的结果(如示例中的后缀增量的结果)不是左值。这意味着它只是一个价值;它不再引用像'c'这样的特定对象,所以试图改变它是没有意义的。它没有可见效果,因为没有对象会被更新。
就我个人而言,我认为在两种陈述中这样做在任何情况下都更清楚。
a = b + c + 1;
c += 2;
答案 1 :(得分:2)
LVALUE表示没有应该执行操作的变量。
C文件基本上只是文本文件,需要特定的格式,因此编译器可以理解它。
编写类似++ Variable ++的东西对编译器来说完全是胡说八道。
你基本上可以把++ c想象成:
Var += 1;
return Var;
而c ++是:
int Buf = Var;
Var += 1;
return Buf;
要“修复”您的代码:
void main() {
int a=1,b=5,c=3;
a = b + (++c); //Equals 5 + 4
printf("a=%d b= %d c= %d \n",a,b, ++c); //a = 9, b = 5, c = 5
}
通过这种方式,您可以获得所需的结果,而无需编译器抱怨。
请记住,在组合操作中使用++ c或c ++时,顺序很重要。 当使用++ c时,操作中将使用更高的值,当使用c ++时,它将使用旧值操作。
这意味着:
int a, c = 5;
a = 5 + ++c; //a = 11
,而
int a, c = 5;
a = 5 + c++; //a = 10
因为在后一种情况下,c在将其添加到5并存储在a中之后仅为“6”。