• C++之指向引用的指针和指向指针的引用总结(二百三十四)


    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

    优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

    人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

    更多原创,欢迎关注:Android系统攻城狮

    欢迎关注Android系统攻城狮

    1.前言

    本篇目的:理解C++之指向引用的指针和指向指针的引用。

    2.指向引用的指针和指向指针的引用介绍

    <1>.指向引用的指针和指向指针的引用概念

    • 指向引用的指针和指向指针的引用是C++语言中的高级概念,它们允许我们在程序中对指针进行更灵活的操作。

    首先,了解一下指针和引用的概念:

    • 指针(Pointer)是一个变量,用于存储另一个变量的内存地址。通过指针,我们可以直接访问和修改存储在该内存地址上的值。

    • 引用(Reference)是一个已存在变量的别名。通过引用,我们可以使用原始变量的名称来操作它,而无需使用指针的间接访问。

    现在,让我们来看看指向引用的指针和指向指针的引用的原理:

    1. 指向引用的指针:
      指向引用的指针是一个指针,其值存储的是一个引用的地址。这意味着我们可以使用指针来间接访问引用所指向的变量。通过使用指向引用的指针,我们可以在不直接使用引用的情况下,通过指针来操作引用所指向的变量。

    2. 指向指针的引用:
      指向指针的引用是一个引用,它引用了一个指针变量。这允许我们通过引用来操作指针变量本身,而不是通过指针操作所指向的变量。通过使用指向指针的引用,我们可以更方便地对指针进行操作,并且可以在函数参数中传递指针的引用。

    <2>.指向引用的指针和指向指针的引用举例

    1. 指向引用的指针:
    int num = 10;
    int* ptr = &num;   // 定义一个指针,指向num
    int& ref = *ptr;   // 定义一个引用,引用ptr所指向的对象
    
    // 修改引用ref的值,等价于修改num的值
    ref = 20;
    std::cout << num << std::endl;  // 输出:20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ptr是一个指向num的指针,ref是一个引用,引用了ptr所指向的对象。通过修改ref的值,实际上修改了num的值。

    1. 指向指针的引用:
    int num = 10;
    int* ptr = &num;   // 定义一个指针,指向num
    int*& ref = ptr;   // 定义一个指向指针的引用,引用ptr
    
    // 修改指针ptr的值,等价于修改了num的值
    *ref = 20;
    std::cout << num << std::endl;  // 输出:20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ref是一个指向指针的引用,引用了ptr这个指针。通过修改ref引用的指针的值,实际上修改了ptr所指向的对象,进而也修改了num的值。

    3.应用实例

    <1>.指向引用的指针

    #include 
    using namespace std;
    
    int main() {
        int x = 5;
        int& ref = x;       // 引用变量ref绑定到x上
        int* ptr = &ref;    // 指针ptr指向ref所引用的变量x
        
        *ptr = 10;          // 通过指针ptr间接修改x的值
    
        cout << x << endl;  // 输出:10
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    创建了一个指向引用的指针ptr,ptr指向了引用ref所绑定的变量x。通过改变指针ptr所指向的地址上的值,间接修改了x的值。

    <2>.指向指针的引用

    #include 
    using namespace std;
    
    int main() {
        int x = 5;
        int* ptr = &x;      // 指针ptr指向变量x
        int** ref = &ptr;   // 引用变量ref引用指针ptr的地址
    
        **ref = 10;         // 通过引用ref间接修改x的值
    
        cout << x << endl;  // 输出:10
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    创建了一个指向指针的引用ref,ref引用了指针ptr的地址。通过改变指针ptr所指向的地址上的值,间接修改了x的值。

    <3>.指向引用的指针数组

    #include 
    using namespace std;
    
    int main() {
        int x = 5;
        int& ref = x;              // 引用变量ref绑定到x上
        int* ptrArr[5] = { nullptr };   // 指针数组,元素类型为指向int的指针
    
        ptrArr[0] = &ref;          // 指针数组的第一个指针指向ref所引用的变量x
    
        *ptrArr[0] = 10;           // 通过指针数组间接修改x的值
    
        cout << x << endl;         // 输出:10
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    创建了一个指向引用的指针数组ptrArr。其中,ptrArr的第一个指针元素指向了引用ref所绑定的变量x。通过改变指针数组元素所指向的地址上的值,间接修改了x的值。

    <4>.指向指针的引用数组

    #include 
    using namespace std;
    
    int main() {
        int x = 5;
        int* ptr = &x;              // 指针ptr指向变量x
        int* (&refArr)[5] = ptr;    // 引用数组refArr引用ptr的地址
    
        *refArr = 10;               // 通过引用数组refArr间接修改x的值
    
        cout << x << endl;          // 输出:10
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    创建了一个指向指针的引用数组refArr。其中,引用数组refArr引用了指针ptr的地址,也就是指向变量x的地址。通过改变引用数组元素所引用的指针的值,间接修改了x的值。

    <5>.指向引用的指针的引用

    #include 
    using namespace std;
    
    int main() {
        int x = 5;
        int& ref = x;                 // 引用变量ref绑定到x上
        int* ptr = &ref;              // 指针ptr指向ref所引用的变量x
        int*& refPtr = ptr;           // 引用ptr的引用refPtr
    
        *refPtr = 10;                 // 通过引用引用间接修改x的值
        cout << x << endl;  // 输出:10
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    创建了指向引用的指针的引用refPtr。refPtr引用了指针ptr的地址,也就是指向变量x的地址。通过改变refPtr所引用的指针的值,间接修改了x的值。

  • 相关阅读:
    【人工智能数学基础】几何解释——最小二乘法
    Servlet规范之安全
    开源大语言模型(LLM)汇总(持续更新中)
    外贸网站怎么做外链来提高谷歌优化效果?
    “高级Vue状态管理 - Vuex的魅力与应用“
    盲盒商城小程序开发功能列表
    心行知合一
    HDRUNet: Single Image HDR Reconstruction withDenoising and Dequantization
    v.$message不弹框的问题
    Spring MVC HandlerAdapter原理解析
  • 原文地址:https://blog.csdn.net/u010164190/article/details/133224859