左值右值详解

在这里插入图片描述

很多做软件开发的朋友对左值和右值的理解比较模糊,今天我们一起来详细了解一下左值和右值。我们先看看左值和右值的定义:等号左边的就是左值,等号右边就是右值。

这个定义给人的感觉就是“什么都没说!”,我们举例来说明一下: data = 100;

其中data就是左值,100就是右值。哦明白了!左值就是变量,右值就是常量。如果你这样认为,那么就是大错特错了,我们再看看下面的例子: data = y;

其中data就是左值,y就是右值,那到底左值和右值是什么呢?左值和右值有如下3个规则:

*1、左值和右值都是表达式。
2、左值是对象定位器,理论上左值指示指示一个对象。
3、右值是一个临时值,其他位置无法访问这个值,通常情况下在语句执行完成后右值就被丢弃。

*
实例
在这里插入图片描述
代码66行的y是一个左值,代码68行y是一个右值。我们把代码转换成汇编语言,看看有什么区别。下面是反汇编代码,FLASH空间数据,RAM空间数据:
反汇编代码如下:
在这里插入图片描述
FLASH空间数据如下:
在这里插入图片描述
RAM空间的数据如下:
在这里插入图片描述
分析y = x
我们先来分析y = x 的反汇编代码和存储空间数据。
在这里插入图片描述
汇编代码分析如下:
在这里插入图片描述
y = x 用 STR r0 ,[r1,#0] 实现,操作的本质是 y是一个地址,x是一个寄存器缓存值。

分析z = y
同样的方法我们先来分析z = y 。
在这里插入图片描述
汇编代码分析如下:
在这里插入图片描述
z = y 用 STR r0 ,[r1,#0] 实现,操作的本质是 z是一个地址,y是一个寄存器缓存值。因此印证了左值是对象定位器,理论上左值指示指示一个对象。右值是一个临时值,通常情况下在语句执行完成后右值就被丢弃。

创作不易希望朋友们点赞,转发,关注。希望获取源码的朋友们在评论区里留言。
作者:李巍
Github:liyinuoman2017

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liyinuo2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值