什么是左值和右值?

什么是左值和右值?

故名思意,左值就是能出现在赋值符号左边的东西,右值就是能出现在赋值符号右边的东西。
具体说来,左值应当标识了一个可以存储结果值得地点,而右值指定了一个值。

看几个例子:

  1. a变量标识了一个内存地址,可以作为左值;而b+2 指定了一个值,无法标识一个定制,最终将 b+2=a 最终将a存储到哪个地址无法预测

    a = b+2  // 合法
    b+2 = a  // 非法
    
  2. 表达式 a[b+!] 标识了一个位置,可以作为左值

     int a[3];
     a[b+1] = 0;
    
  3. pi指针得值,是内存的某个地址,使机器指向那个地址。 当pi作为左值使用,标识了需要修改的地址,作为右值使用时,就提取当前存储于这个位置的值。

    int a,*pi;
    pi = &a;
    *pi = 20;
    

综上,无论是变量还是表达式作为左值,都应当能标识一个地址。
操作结果类型为地址的操作符有:

操作符 描述
[] 下标引用
. 访问结构
-> 访问结构指针成员
* 间接访问

你可能感兴趣的:(什么是左值和右值?)