【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啊。

猜你喜欢

转载自blog.csdn.net/Alpherkin/article/details/126300457