0

为什么需要左值作为增量操作数错误在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);
}
4

2 回答 2

8

后缀增量比前缀增量绑定得更紧密,所以你想要的是这样的:

a = b + (++c)++;

但是,这不是合法的 C,因为前缀增量的结果(就像您的示例中的后缀增量的结果)不是lvalue。这意味着它只是一个值;它不再引用像“c”这样的特定对象,因此尝试更改它是没有意义的。它不会有明显的效果,因为不会更新任何对象。

就个人而言,我认为在任何情况下都用两个语句来做会更清楚。

a = b + c + 1;
c += 2;
于 2012-10-11T07:12:09.037 回答
3

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”。

于 2012-10-11T07:17:23.633 回答