左值与右值
程序员文章站
2022-03-07 08:45:53
左值与右值? 左值(L-value)与右值(R-value),二者之间的区别是什么? 左值与右值 01 这两个术语是多年前由编译器设计者所创造并沿用至今的,尽管它们的定义并不与C语言严格吻合。 02 左值就是那些可以出现在赋值符号左边的东西;右值就是那些可以出现在赋值符号右边的东西。 这样的解释有些 ......
左值与右值?
左值(l-value)
与右值(r-value)
,二者之间的区别是什么?
左值与右值
01
这两个术语是多年前由编译器设计者所创造并沿用至今的,尽管它们的定义并不与c语言严格吻合。
02
左值就是那些可以出现在赋值符号左边的东西;右值就是那些可以出现在赋值符号右边的东西。
这样的解释有些脱下裤子放屁的意思,通过名称我们也能得出左值和右值的意思,那么应该出现在赋值符号左边的东西是什么呢?
03
1. a = b + 1; 2. b + 1 = a;
在语句1中,a是一个左值,因为它标识了一个可以存储结果值的地点;b + 25是个右值,因为它指定了一个值。
那么,能像语句2一样,互换左右值的位置吗?
原先用作左值的a此时也可以作为右值,因为每个位置都包含一个值。然而,b + 25无法作为一个左值,因为它并未标识一个特定的位置。因此,语句2是非法的。
04
int a = 5; ++(a++);
如果尝试执行此段代码,则会出现如下报错
main.c:4:2: error: expression is not assignable ++(a++); ^ ~~~~~ 1 error generated.
报错的意思为: 表达式不可赋值
将++(a++)
拆解,++(a = a + 1)
-> ++(5)
-> 5 = 5 + 1
。拆解之后,很容易就能发现问题所在。5是一个常量,它无法被赋值为6。
05 左值与右值
左值: 是指用于识别或定位的一个标识符,同时左值还必须是可以被改变的
右值: 任何可以被读取的值都是右值(非左值)
上一篇: C学习笔记(10)--- 强制类型转换,错误处理,递归
下一篇: Ruby入门介绍第1/5页
推荐阅读