• 详解:取地址操作符(&)及解引用操作符(*)


    详解:取地址操作符(&)及解引用操作符(*)

         对于指针:我想,应该是多数人的梦魇,包过笔者也一样,之前老是听前辈说过,指针怎么怎么样,怎样难!但是,总归是片面的,不可取的,现在笔者也在刚刚学习到了:指针,所以打算博客一篇,来纪念一下:第一次对于指针的初步认识,及感悟!

        首先:我们需要理解指针的两个概念:

    数据在内存中的存储:编号----》地址-----》指针

    1.指针是内存中最小单元的编号(1个字节),也就是地址!

    2.平时口语中所说的指针:通常指的就是指针变量,是用来存放内存地址的变量!

    因此:我们对于上述的简单总结为:

    指针就是地址,口语中所说的指针,通常指的就是指针变量

    指针变量:通过&(取地址操作符)取出变量的内存起始地址,把地址存放在一共变量中,这个变量就是指针变量!

    下面来用代码介绍如何打印地址!

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. printf("%p\n", &a); // 用%p来打印地址
    6. return 0;
    7. }

      在这里printf("%p\n", &a);   //    用%p来打印地址,我们需要着重注意%p是用来打印地址的!

    代码的运算结果为:

     因为,我们给a赋初始值a=10;将a存储起来就需要一个地址(电脑分配),所以我们可以通过这个地址来找回a的值,这个也是可行的,这个就是需要我们对'&a',进行解引用操作(*),对于解引用操作(*),下面笔者将会进行讲解!因此读者,请稍安勿躁!

     对于这个代码,在第150行是不可取的,下面已经给了警告!

    虽然运转出来结果了,但是做法是不可取的!

    因此,正确的书写规范为:

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. int* pa = &a;
    6. printf("%d\n", *pa);
    7. //printf("%d\n", pa); //错误写法,不可取
    8. return 0;
    9. }

    因此,用指针来通过取地址求值时候,需要进行有效的代码!

    int a = 10;    int* pa = &a;  在这段代码中,笔者希望能够正确理解各个所代表的含义!

    对于int*pa=&a,在这句中  int 指向a的类型为int型,*指向pa为指针变量!

    同理,对于;char  ch;   char  *pc=&ch;有着一样的解释,根据上面的解释,就能得到该段代码表示的具体意思!

    但是,对于   int* pa = &a;   可以写成:int* pa;    pa = &a;    因此,上述代码可以写为:

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. int* pa;
    6. pa = &a;
    7. printf("%d\n", *pa);
    8. return 0;
    9. }

    代码的运行结果也是一样的!

     

    int* pa;   pa = &a;,在该段代码中,我们可以看出来:pa只是一个定义了int类型的指针,(  pa = &a)前面并没有任何标识; 但是对于printf("%d\n", *pa);打印结果时候,用了*(解引用操作符)这个跟int*pa=&a;及int *pa;中的表示意义是不一样的!需要多多注意

    pa虽然是指针,存放着a的地址,但是pa也有着自己的地址!通过对pa的地址进行解引用操作,也一样可以找到a的值!

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. //int* pa = &a;
    6. int* pa;
    7. pa = &a;
    8. printf("%d\n", *pa);
    9. int** ppa = &pa;
    10. printf("%d\n", **ppa);
    11. return 0;
    12. }

    在这个代码里面,将涉及部分二级指针的内容!

    代码的运行结果为:

     

    有意者请联系笔者私聊,或者参考读者以后代码!在这里笔者将不再进行涉及二级指针的内容

  • 相关阅读:
    Debian linux系统更换apt源
    LVGL简介(基于v8.1-8.2)
    ORACLE - 数据查询
    Vue3中的几个坑,你都见过吗?
    python计算长方形面积 青少年编程电子学会python编程等级考试一级真题解析2022年6月
    14:00面试,14:06就出来了,问的问题有点变态。。。
    CRC校验——以SHT4xA温湿度传感器为例
    C++前缀和算法的应用:从仓库到码头运输箱子原理、源码、测试用例
    VUE的10个常用指令
    03.状态图、活动图、时序图、协作图、组件图、部署图
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/126173960