C语言中左值和右值概念是来自赋值或复合赋值表达式。初学者会很容易迷惑,这里给出这两个概念总结。
对于赋值表达式E1=E2,其中E1必须是可修改的左值,E2是右值。
左值:简写lvalue,left value
右值:简写rvalue,right value
例如:int m = 1; 很明显m是左值,1是右值。
左值是指向内存区域的对象,左值可以出现赋值表达式的左边或右边,当左值出现的右边时,自动转换为右值使用。
右值是指存储在内存中的数值本身,右值不能出现的赋值表达式左边,否则编译出错。
例如:
int m,n;
m = 1; // 合法,m是左值
n = m; // 合法,n是左值,m自动转换为右值
1 = m; // 不合法,1是常量,只能作为右值
1 = 2; // 不合法,1是右值
C语言中左值要求是变量,包括以下情况:
基本类型的变量:char int float double 型变量
枚举类型变量
数组类型下标成员访问:例如 a[i] = 1
结构类型变量或成员变量