为什么需要左值作为增量操作数错误在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);
}
后缀增量比前缀增量绑定得更紧密,所以你想要的是这样的:
a = b + (++c)++;
但是,这不是合法的 C,因为前缀增量的结果(就像您的示例中的后缀增量的结果)不是lvalue。这意味着它只是一个值;它不再引用像“c”这样的特定对象,因此尝试更改它是没有意义的。它不会有明显的效果,因为不会更新任何对象。
就个人而言,我认为在任何情况下都用两个语句来做会更清楚。
a = b + c + 1;
c += 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 中之后,c 只会是“6”。