在做c语言练习的时候,总是会出现左操作数必须是左值. 比如 c语言的引用:
int & a = 9; (x)
const int & a = 9; (√)
左值可以出现在赋值语句的左边或右边。右值只能出现在赋值的右边,不能出现在赋值语句的左边。
左值就是在赋值中可以放在赋值操作符 两边 的值,比如:
int a = 1;
int b = 2;
a = b; b = a; 这里a和b都是左值,一切变量都是左值,但const量是例外.
*p是一个左值,和变量一样,只要在*p的右边加上赋值运算符,就可改变*p的值。 如果p是一个指向常量的指针,*p就是一个不能修改的左值,即它不能被放到赋值运算符的左边;
i和 -i 都是表达式 但一个是左值(i),一个是右值(-i); why? -- i不仅是一个表达式,它还是一个变量,
但是 -i 却不是一个变量,-i是一个表达式,而不是一个变量,一个表达式是不可以作为左值的;
什么是表达式: 表达式由一个或多个 操作数 通过 操作符 组合而成。最简单的表达式仅包含一个 字面值常量 或 变量。较复杂的表达式则由操作符以及一个或多个操作数构成。
++、-- 这两种操作符要求作用于左值,所以i++合法,
(-i)++不合法 -> -i=-i+1(-i+1的值不能附给-i,因为没有 -i 这个变量存储空间)
一个赋值表达式: X = Y; 在这个表达式里,符号X的含义是X所代表的地址,这被称为左值,左值在编译时可知,左值表示存储结果的地方; 在这个表达式里,符号Y的含义是Y所代表的地址的内容,这被称为右值,右值在运行时才可知,如无特别说明,右值表示“Y的内容”。
右值是只可以放在赋值操作符右边的值,比如:
int a = 0;
char *b = "hello";
3 = a; // 错误!
"howdy" = b // 错误!
这里3和"howdy" 都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值!
浙公网安备 33010602011771号