【C语言】左值与右值
左值就是“=”号左边的变量或表达式,是一个确切的,具有实际空间的存储地址,右值是一个数据,因此左值不能是一个字面值。
按字面意思,通俗地说。
就是以赋值符号 = 为界,= 左边的就是左值,= 右边就是右值。
比如:
(1) int b = 3;
(2) int a = b;
第(2)行代码,a为左值,b为右值。
更深一层
可以将 L-value 的 L, 理解成 Location,
表示定位,地址,代表一个内存地址值
将 R-value 的 R
理解成 Read,表示读取数据,是真实值
现在的计算机数据放在内存。内存有两个很基本的属性:内存地址和内存里面放的数据。
想象完全一样的箱子。每个箱子有个编号,用来区分到底是哪个箱子,箱子里面可以放东西。内存地址相当于箱子的编号,内存的数据,相当于箱子里面放的东西。
变量名编译之后,会映射成内存地址。
看看a = b的含义。其实就是 将 “b地址内存里面的数据”,放到”a地址内存”中。
左值和右值是相对于赋值表达式而言的。左值是能出现在赋值表达式左边的表达式。左值表达式可以分为可读写的左值和只读左值。
右值是可以出现在赋值表达式右边的表达式,他可以是不占据内存空间的临时量或字面量,可以是不具有写入权的空间实体。
如:
int a=3;
const int b=5;
a=b+2; //a是左值,b+2是右值
b=a+2; //错!b是只读的左值但无写入权,不能出现在赋值符号左边
(a=4)+=28; //a=4是左值表达式,28是右值,+=为赋值操作符
34=a+2; //错!34是字面量不能做左值
其实没有什么左值和右值!只是翻译成这样的,实际是:
L-value中的L指的是Location,表示可寻址。The “l” in lvalue can be though of as
location R-value中的R指的是Read,表示可读。The “r” in rvalue can be thought of as”read” value.
还没有评论,来说两句吧...