1. 定义
左值 Lvalue:有名有地址,比如变量
右值 Rvalue:无名无地址,比如常量,函数返回值,表达式
较模糊的通俗说法是 等号左边为左值,右边为右值。
2. *和&的基本用法
*
的意思是指针。
&
的意思是引用,即不要复制一个,而是取已经存在的那个。而引用唯一那一个左值的方法是取地址,所以(如指针或直接输出时)可以把&x
视作取x
的地址;但其他时候,&
和地址没有直接关系,仅仅是指引用x
本身。
对于左值 x,
(黑色为所有左值(变量)通用的解释,灰色为指针特有)
a. 指针
int a = 5;
int *data = &a; //data是指向a的指针,它的值是a的地址
*data = 666; //或 a = 666;
*data
⟺ a
⟺ 5
⟺ 整型的值
data
⟺ &a
⟺ 0x7f7461c02010
⟺ 整形的地址
&data
⟺ 0x7fffe706f818
⟺ 指针的地址
b. 左值右值
int a = 5