按字面意思,通俗地说。以赋值符号 = 为界,= 左边的就是左值,= 右边就是右值。 比如:(1) int b = 3(2) int a = b第(2)行代码,a为左值,b为右值。
更深一层,可以将 L-value 的 L, 理解成 Location,表示定位,地址。将 R-value 的 R 理解成 Read,表示读取数据。现在的计算机数据放在内存。内存有两个很基本的属性:内存地址和内存里面放的数据。想象完全一样的箱子。每个箱子有个编号,用来区分到底是哪个箱子,箱子里面可以放东西。内存地址相当于箱子的编号,内存的数据,相当于箱子里面放的东西。
变量名编译之后,会映射成内存地址。看看a = b的含义。其实就是 将 "b地址内存里面的数据",放到"a地址内存"中。
中文名
左值与右值
外文名
lvalue and rvalue
快速
导航
案例列举
应用注意
左值右值基本信息
C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。左值表示存储在计算机内存的对象,而不是常量或计算的结果。或者说左值是代表一个内存地址值,并且通过这个内存地址,就可以对内存进行读并且写(主要是能写) *** 作;这也就是为什么左值可以被赋值的原因了。相对应的还有右值:当一个符号或者常量放在 *** 作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值。简单来说就是,左值相当于地址值,右值相当于数据值。右值指的是引用了一个存储在某个内存地址里的数据。
案例列举
比如: int ia,ib;
ib=0;
ia=ib;
在这里,首先定义ia,ib。然后对ib赋值,此时计算机取ib的左值,也就是这个符号代表的内存位置即内存地址值,计算机取0的右值,也就是数值0;然后给ia赋值为ib,此时取ib的右值给ia的左值;
所以说,ib的左值、右值是根据他的位置来说的;
这也算是形式语言的一个有意思之处吧。
应用注意
左值右值翻译:
L-value中的L指的是Location,表示可寻址。Avalue (computer science)that has an address.
R-value中的R指的是Read,表示可读。in computer science, a value that does not have an address in a computer language.
左值和右值是相对于赋值表达式而言的。左值是能出现在赋值表达式左边的表达式。左值表达式可以分为可读写的左值和只读左值。右值是可以出现在赋值表达式右边的表达式,他可以是不占据内存空间的临时量或字面量,可以是不具有写入权的空间实体。如
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是字面量不能做左值
C++语言中可以放在等号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。 或者说左值是代表一个内存地址值,通过这个内存地址,就可以对内存进行读写 *** 作;这也就是为什么左值可以被赋值的原因了。 相对应的还有右值:当一个符号或者常量放在 *** 作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值。 比如: int ia,ib; ib=0; ia=ib; 在这里,首先定义ia,ib。然后对ib赋值,此时计算机取ib的左值,也就是这个符号代表的内存位置即内存地址值,计算机取0的右值,也就是数值0;然后给ia赋值为ib,此时取ib的右值给ia的左值; 所以说,ib的左值、右值是根据他的位置来说的; 这也算是形式语言的一个有意思之处吧。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)