左值和右值(1)——本质上区分(c语言)

如果仅仅从在等号的左边和右边来看,比较单薄

1. lvalue

  1. locator value:lvalue是对一个变量的身份识别,这个变量必须在内存中能够被追踪到(它必须在内存有固定住所)
  2. live value:区分某些temporary的变量,lvalue生存特征在于你知道它是一定存在的,并且大部分是可以对它进行修改的(不然为什么通常放在等号左边)
  3. in case you don’t know: 有些左值无法修改(不是在等号左边)
    e.g.
    不可以对数组名进行赋值,不可以对const修饰的左值赋值,不可以对string进行赋值

2.rvalue

  1. value:rvalue 需要强调的是它代表的仅仅是一个值,无法追踪到这个值的地址,而是数值本身
  2. 从lvalue来看,当我们读取lvalue并且把一个lvalue赋值给另一个,实质上完成了从左值到右值的convert
  3. 泛泛的说,lvalue可以看作为跟地址一样的东西,而rvalue是内部的值,它们都描述了一块内存的属性。只不过,我们可以通过地址锁定特定的内存,但是不同地址的内存可以有相同的值,因此通过rvalue并不能够锁定某一块内存。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值