在 C
语言中有两个概念,一个是“左值”,另外一个是“右值”。
赋值表达式语句的目的是把值存储到内存上,其中:
C
只会在提及左右值概念的时候才会提及这个术语)因此,沿着上述思路可以得到左右值得概念。
左值:是可以用于标识或定位存储位置的标签。
但是由于 C
的某次新标准加入了 const
关键字,导致有时会不满足第二条规则,因此左值又根据第二条规则分为了“可修改左值”和“不可修改左值”(后者只能放在赋值符号的右边)。
也就是说,根据第一条判断是否为左值,第二条判断左值是否可以被修改。
右值:是可以赋值给可修改左值的量,且本身不能是左值。右值只能放在右边,也就叫右值。右值无法被赋值,因此不可能在赋值符号的左边。
补充:我们举几个例子来判断左右值
int ex; //创建左值(可修改),已经关联上某个特定内存 int why; //创建左值(可修改),已经关联上某个特定内存 int zee; //创建左值(可修改),已经关联上某个特定内存 const int TWO = 2; //创建出左值(不可修改) why = 42; //将右值 42 赋值给左值(可修改) zee = why; //将左值赋给左值 ex = TWO * (why + zee); //(why + zee) 整体是一个右值,不指定某个特定内存,也不能直接给其赋值,该式只是程序计算出来的临时值,计算完后就会被丢弃
- 1
- 2
- 3
- 4
- 5
- 6
- 7
因此左值和右值不能根据其位置是左还是右来简单认定,实际上这两个术语很容易被人所误会。