【C++】解引用 (及指针) 和 引用 的概念区别

以下为个人理解,仅供参考

三种变量,代码示例

#include <iostream>

int main()
{ 
    int val  = 10;		/// 普通变量
    int &quo = val;		/// 引用变量
    int *ptr = &val;	/// 指针变量

    std::cout << std::endl;
    std::cout << std::endl;

    std::cout << "普通变量 val 的值: val = " << val  << std::endl;
    std::cout << "普通变量 val 地址:&val = " << &val << std::endl;
    std::cout << std::endl;

    std::cout << "引用变量 quo 的值: quo = " << quo  << std::endl;
    std::cout << "引用变量 quo 地址:&quo = " << &quo << std::endl;
    std::cout << std::endl;

    std::cout << "指针变量 ptr 的值: ptr = " << ptr  << std::endl;
    std::cout << "指针变量 ptr 地址:&ptr = " << &ptr << std::endl;
    std::cout << std::endl;

    std::cout << "指针变量 ptr 指向的变量的值:    *ptr = " << *ptr << std::endl;
    std::cout << "指针变量 ptr 指向的变量的地址:&(*ptr) = " << &(*ptr) << std::endl;
    std::cout << std::endl;

    std::cout << std::endl;
    std::cout << std::endl;
    return 0;
}

运行结果

一个变量是由数值和地址这两个元素共同构成的。

从上图中我们可以看到,

1. 引用变量 quo普通变量 val 是完全等价的,两者的数值和地址都相等。
 也就是说 quo 只是 val 的一个别名、小名。比如说张三的小名叫张小三,显然张三和张小三都是指同一个人。这里的 符号& 可以认为是取小名的标识,而不是取地址的意思

2. *ptr 等于 变量 val 的数值,&(*ptr) 等于 变量 val 的地址。

3. 而 指针变量 ptr 作为一个变量,它也拥有自己的数值和地址,且 指针变量ptr 的值是 普通变量 val 的地址。这就是我们通常说的 指针变量 ptr 指向了 普通变量 val

下面解析三种变量

符号 &:引用
符号 *:解引用

    int val  = 10;		/// 普通变量
    int &quo = val;		/// 引用变量
    int *ptr = &val;	/// 指针变量

请遵循以下两个原则(后面解释会用到)

  1. quo 是变量,ptr 也是变量 (且不同于 *ptr)
  2. 每个变量都有自己的地址和存储的值

关于引用 &

int &quo = val :意为 quoval 的别名(alias),比如说张三的小名叫张小三,显然张三和张小三都是指同一个人。这里的 符号& 可以认为是取小名的标识,而不是取地址的意思。

关于指针及解引用 *

int *ptr = &val:意为变量 val 的地址赋给变量 ptr (遵循原则1),所以 ptr 的值存的是一个地址 (遵循原则2)

而解引用符合* 的作用就是根据地址找到对应的值。
*ptr 理解为根据 ptr 的值 (存的是 val的地址) 对应的值。也就是说根据变量 val 的地址找对应的值,这个值就是 val的值 10啊。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值