为什么 a++=5 是错误的?

Why a++=5 is error?

我刚刚用c写了一段代码

#include <stdio.h>

int main()
{
    int a=0;
    option1: a++=5;
    option2: ++a=5;
    printf("%d\n",a);

    return 0;
}

但它没有编译错误

lvalue required as left operand of assignment

为什么会出错? 谢谢!

a++=5 等同于 (a++)=5

并且 (a++) 将计算为 1,而您不能执行 1=5

语法无效。

a++; //it will give 1. so after that you are assinging

原来如此

1=5;

它会给你报错。参考这个 link.

因为,正如您的编译器所说,a++ 不是 lvalue,而是 rvalue。 您将找到有关 lvaluervalue here.

的更多信息

变量 是与存储 关联的名称。当你定义一个变量时,你将一个符号关联到一个保留的存储空间。在程序中,您可以在不同的地方使用变量的名称。在算术表达式中,如 a+1a 指的是存储在与符号关联的内存中的 。当你在像 a=3 这样的赋值中使用它时,a 指的是 存储位置 .

当符号用来表示值时,就说是一个r-值(右值,在赋值的右边),当符号用于表示位置时,它被称为 l-value(左边的值,value 在作业的左侧)。在 a=b 中,a 是左值,b 是右值。

你只能在赋值的左边有左值,唉a++是一个表达式,表示变量在增量之前的值,而不是位置,所以你不能把它在作业的左侧。

嗯,a++ 只是写 a=a+1 的快捷方式而已。 a++ 和 ++a 有所不同,但最终都将变量的初始值加 1(此处变量为 a)。a++=5 不是有效语法。 例子: 假设我们有一个初始值 a=3,现在如果你写 a++ == 5(注意 == 这意味着在编码中等于)它意味着 4==5 这不是真的。 但是由于您使用的是“=”,因此您的代码对编译器没有任何意义。