• 指向指针的指针pp指向指针p


    向初学者菜鸟讲解什么是“指向指针的指针”并不轻松。本着**少逼逼,给我看代码(Talk is cheap, Show me the code)**的原则,海洋饼干叔叔直接以一个完整示例开头,来试试。

    本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
    叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
    1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
    2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
    3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频

    如果一个指针指向一个int类型的对象,那么该指针的类型为int*。如果一个指针指向的对象不是一个平凡的对象,而是另外一个指针,那么这个指针就成为“指向指针的指针”。请见下述C语言示例:

    //Project - Pointer2Pointer
    #include 
    
    int main(){
        int a = 100;
        int *p = &a;
        int **pp = &p;
    
        printf("&a = %p, p = %p\n", &a, p);   //p的值为a的地址
        printf("&p = %p, pp = %p\n", &p, pp); //pp的值为p的地址
        printf("&pp = %p\n", &pp);
        printf("before: a = %d, *p = %d, **pp = %d\n", a, *p, **pp);
    
        a++;
        (*p)++;
        **pp = **pp + 1;
    
        printf("after: a = %d, *p = %d, **pp = %d\n", a, *p, **pp);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    上述程序的执行结果为:

    &a = 000000000061FE1C, p = 000000000061FE1C
    &p = 000000000061FE10, pp = 000000000061FE10
    &pp = 000000000061FE08
    before: a = 100, *p = 100, **pp = 100
    after: a = 103, *p = 103, **pp = 103
    
    • 1
    • 2
    • 3
    • 4
    • 5

    说明:在读者的计算机上,执行结果前3行中的地址很可能与本书不同。

    🚩第5 ~ 7行:定义了三个变量a、p以及pp。根据程序的输出值,我们画出了下述示意图。
    图1 a、p及pp之间的关系
    从图1中可以看出,a、p、pp都是变量,只是类型各不相同,它们都有自己的存储地址和空间。p是指向a的指针,p的值即为a的地址;pp则是指向p的指针,pp的值即为p的地址。

    🚩第9行:输出a的地址及p的值,从执行结果的第1行可见,p值即为a的地址,指针p指向a。

    🚩第10行:输出p的地址及pp的值,从执行结果的第2行可见,pp的值即为p的地址,指向指针的指针pp指向指针p。

    🚩第11行:输出pp的地址。从执行结果的第3行可见,pp也是一个对象,拥有自己的内存及地址。

    🚩第12行:输出a,*p以及**pp的值。pp是一个指向指针的指针,pp即为p,**pp等价于p,即为a。执行结果的第4行可见,三种途径都输出了相同的值,即a的值100。

    🚩第14 ~ 16行:通过a、*p以及**pp三种方式修改a的值,执行完后,a值预期应为103。

    🚩第18行:再次输出a、*p以及**pp的值。执行结果的第5行可见,三种途径都事实上输出了a值,为103。

    为了帮助更多的年轻朋友们学好编程,作者在B站上开了两门免费的网课,一门零基础讲Python,一门零基础C和C++一起学,拿走不谢!

    简洁的C及C++
    由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造
    Python编程基础及应用
    由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造

    如果你觉得纸质书看起来更顺手,目前Python有两本,C和C++在出版过程中。

    Python编程基础及应用

    Python编程基础及应用实验教程
    在这里插入图片描述

  • 相关阅读:
    uniapp基础学习笔记01
    jxTMS设计思想之流程开发(一)
    动态规划算法
    算法通关村——滑动窗口高频问题
    Power Apps-使用power Automate流
    leetcode448找到所有数组中消失的数字
    Real-Time Rendering——8.1.4 Rendering with RGB Colors8.1.4用RGB颜色渲染
    Android Compose Bloom 项目实战 (二) : 欢迎页
    计算电磁学(一)前置知识
    Java中的7种位运算详解和应用
  • 原文地址:https://blog.csdn.net/SeaBiscuitUncle/article/details/126555264