首先我们看一下什么是左值、右值。
(1)左值就是一个可被存储的单元,右值就是一个可被读取的数据。
(2)左值必须是一个被明确了的内存存储单元,可以用来被赋值;右值必须是一个能被读出来的确确实实的值,这个值可以是数据,可以是指针,可以是结构,反正只要能被读出来的,都可以定义为右值。
接下来我们先看如下代码:
int a = 112, b = 1;
int *d = &a;
b = *d;
问题来了,你能准确写出a b d *d各自的值吗?
d的值分为两种情况:
d左值(当d出现在赋值符号左侧时):表达式 d 表示的是存储d这个指针变量本身的内存地址。
d右值:表达式 d 表示的是存储变量a的内存地址。
*d的值也分为两种情况:
*d左值:表达式 *d 表示的是存储变量a的内存地址。
*d右值:表达式 *d 表示的是存储变量a的内存地址中的所存的值。