• 指针详解【C语言】


    1第一步

     学生  *pstu;

    1. 这里学生是类型
    2. *是解地址
    3. pstu是地址容器
    4. 语法里 学生 学生1;就会开辟内存。
    5. 这里【学生1】和 【*pstu】等效
    6. 那这里【pstu】是带类型的指针容器
    7. *pstu是解地址,还原出类型对象。
    8. 这里【*】只是解地址的操作符
    9. 【pstu】是包含2个信息的,类型和地址值
    10. 通过【*】操作解地址,还原出 【学生1】这个实例对象

    2第二步

    pstu = &学生1;

    1. 这里【&】是取地址操作符。
    2. 只能取已经开辟的内存的实例对象。
    3. 【学生1】是包含2个信息的,类型和开辟内存的地址值。
    4. 但是【&】操作之后,类型就丢了,只有内存的地址值。【这个内存地址值是cpu的bit类型,比如32位,u32】
    5. 这个内存的地址值是cpu的位数,一般是以字节为单位。
    6. 需要注意的是,地址值自增1,只会偏移1个字节。
    7. 只有类型对象的自增1,才会指向下一个对象。
    8. 也就是【pstu+1】,因为pstu是包含2个信息的,类型和内存地址值,//注意不能写成pstu++
    9. 只有包含2个信息的【pstu】自增1,才会在内存地址值的基础上,偏移1个类型大小的长度。

    3数组

    byte    a[5];

    1. 这里 byte 是数据类型。
    2. a[5]这个a实际是类型指针,它包含2个信息,类型和内存地址值 ,而且首地址是指向a[0]这个对象。
    3. a+1;这个操作后,会指向a[1]这个对象。
    4. 不能写成a++ 只有新建 *b这个容器,【b=&a】这样才能b++操作,才能指向a[1]
    5. 这就跟2杯水不能交换,需要第3个空杯子,才能完成2杯水的交换。

    4二级指针

    有这种情况,AB两个银行,A银行的保险柜存放的钥匙,才能打开B银行保险柜其中的一个保险柜。

    有点像寻宝藏,找到一个线索,才能解开下一个谜题,获取到下一个线索。

    这种取2次的叫二级指针,取3次以上的,叫多级指针。

           *B*A

    1. 指针是从右向左
    2. 先取A银行的钥匙,再去打开B银行的保险箱,才能拿到钱。

    二级指针有const的情况,就是一个保险箱是只读的,它不能被改变

    *B* const A

    还有一种是2个都是只读的

    * const B * const A

    举例了这么多,那3级指针也会写了吧。

    * const C * const B * const A

    顺序是从右到左

    5函数指针

    这个作用是你写了一堆函数,而我只需要写一个函数,就可以去调用你写的所有函数。

    但也是有几个条件的。函数签名要一致,调用之前要先取被调用函数的内存地址值。

    void  (*point)() = &main;

    调用的时候     point( );  就可以了。

  • 相关阅读:
    2022下半年《软考-系统架构设计师》备考经验分享
    Day1讲题题单
    npm换更换淘宝镜像
    ros主从机配置 分布式多机通信
    16.预处理、动态库、静态库
    逆波兰计算器的实现(思路分析) [数据结构][Java]
    hive 中正则表表达式使用
    技术分享|电商数据接口|淘宝天猫京东商品API接口之数据同步
    SpringSecurity源码学习二:异常处理
    Java多线程-线程的优先级(priority)以及守护线程(daemon)
  • 原文地址:https://blog.csdn.net/cfqq1989/article/details/134471592