C 为什么是a++=5是错误吗?

C 为什么是a++=5是错误吗?,c,operator-precedence,C,Operator Precedence,我刚刚用c写了一段代码 #include <stdio.h> int main() { int a=0; option1: a++=5; option2: ++a=5; printf("%d\n",a); return 0; } 为什么这是一个错误? 谢谢 a++=5与(a++=5相同 和(a++)将计算为1,您不能执行1=5,因为这不是有效的语法 a++; //it will give 1. so after that you are

我刚刚用c写了一段代码

#include <stdio.h>

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

    return 0;
}
为什么这是一个错误? 谢谢

a++=5与(a++=5相同


和(a++)将计算为1,您不能执行1=5,因为这不是有效的语法

a++; //it will give 1. so after that you are assinging
所以它就像

1=5;

它会给你错误。引用此是因为,正如编译器所说,
a++
不是
左值,而是
右值。

您将找到有关
lvalue
rvalue

A变量是与存储相关联的名称。定义变量时,将符号与保留存储器相关联。在程序中,可以在不同的位置使用变量名。在算术表达式中,如
a+1
a
指存储在与符号相关联的存储器中的值。当您在诸如
a=3
之类的赋值中使用它时,
a
指的是存储位置

当符号用于表示值时,称其为r值(右值,赋值右侧的值),当符号用于表示位置时,称其为l值(左值,赋值左侧的值)。在
a=b
中,
a
是l值,
b
是r值


在赋值的左边只能有l值,唉,
a++
是一个表达式,表示变量在增量之前的值,而不是位置,因此不能将其放在赋值的左边。

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

选项1:a++=5
不是C代码。@Vagish实际上是。转到标签@HolyBlackCat:他试图实现类似
a=6=5
的目标。这是无效的。你可能被否决了,因为两个“选项”都没有实际意义(换句话说:我们甚至不知道你想做什么)。解释你试图做的事情通常是个好主意。可能是因为缺乏研究而被否决了,搜索错误消息会给出一系列结果,而且(在对左值是什么进行了一些研究之后)错误消息是非常不言自明的。
a
本身的计算结果为0。仍然
a=5有效,尽管“你不能做”
0=5
1=5;