为什么 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
。
您将找到有关 lvalue
和 rvalue
here.
的更多信息
变量 是与存储 关联的名称。当你定义一个变量时,你将一个符号关联到一个保留的存储空间。在程序中,您可以在不同的地方使用变量的名称。在算术表达式中,如 a+1
、a
指的是存储在与符号关联的内存中的 值 。当你在像 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 这不是真的。
但是由于您使用的是“=”,因此您的代码对编译器没有任何意义。
我刚刚用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
。
您将找到有关 lvalue
和 rvalue
here.
变量 是与存储 关联的名称。当你定义一个变量时,你将一个符号关联到一个保留的存储空间。在程序中,您可以在不同的地方使用变量的名称。在算术表达式中,如 a+1
、a
指的是存储在与符号关联的内存中的 值 。当你在像 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 这不是真的。 但是由于您使用的是“=”,因此您的代码对编译器没有任何意义。