什么是左值和右值?
故名思意,左值就是能出现在赋值符号左边的东西,右值就是能出现在赋值符号右边的东西。
具体说来,左值应当标识了一个可以存储结果值得地点,而右值指定了一个值。
看几个例子:
-
a变量标识了一个内存地址,可以作为左值;而b+2 指定了一个值,无法标识一个定制,最终将 b+2=a 最终将a存储到哪个地址无法预测
a = b+2 // 合法 b+2 = a // 非法
-
表达式 a[b+!] 标识了一个位置,可以作为左值
int a[3]; a[b+1] = 0;
-
pi指针得值,是内存的某个地址,使机器指向那个地址。 当pi作为左值使用,标识了需要修改的地址,作为右值使用时,就提取当前存储于这个位置的值。
int a,*pi; pi = &a; *pi = 20;
综上,无论是变量还是表达式作为左值,都应当能标识一个地址。
操作结果类型为地址的操作符有:
操作符 | 描述 |
---|---|
[] | 下标引用 |
. | 访问结构 |
-> | 访问结构指针成员 |
* | 间接访问 |
网友评论