指针/地址 到底是左值还是右值

这里写图片描述

以下引用网友:lm_whales

左值可以当作右值使用,右值不能当左值用.
左值可以出现在=的任何一方,
出现在=右方的左值,是把左值当作右值使用,这是非常正常的.

右值,不能当作左值使用.
能够(单独)出现在=左方的是左值(实际是左右值,左值总是可以当作右值使用)
只能够出现在=右方的,是右值(纯粹的右值),不能当作左值使用.
左值代表地址单元,右值代表数据本身.

地址单元里的数据,是左值变量的右值的含义.

右值包括,纯数据,比如常数100,字符串常量”12345”等
以及地址单元中存储的数据.比如x ,这是左值当作右值使用代表的意义.
以及一些常变量(有确切地址的常量,可以象变量一样有个名字,其实就是变量,只是右值化了,不能当左值使用了)的含义.
左值代表存储器的一个单元.
这是一个物理概念,不仅仅是个地址(地址不过是个编号,是个数值而已),是个实实在在的东西.
右值代表数据,一个数值而已.

再对上图红框部分作解释:
1.“取地址符作用于一个左值运算对象”
这句话的意思是:取出的地址值要赋给了等号左边的指针变量
2.“返回指向该运算对象的指针”
这里的“指针”只是一个地址的编号,是一个常量数值而已,不能被改变,所以是右值

代码分析:

    int a=112,b=0;
    /*假设a的地址为1000*/
    int *p=&a,*q=nullptr;
    b = *p; 
    /* *p是个表达式,不是个右值,但是它所指的内容[a的地址1000]被当做右值*/
    q = p;
    /*q是个指针且是左值*/

指针 == 地址 不总是成立
我们通常把地址和指针的概念模糊化了,或者是它俩的含义不只一个。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值