为什么左值作为递增操作数错误?

时间:2012-10-11 06:45:35

标签: c increment lvalue decrement operand

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

2 个答案:

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