当前位置: 首页 > news >正文

函数指针学习

认识函数指针:

函数指针的用处:

回调函数(以函数指针为参数的参数)

定义带标签的结构体

typedef struct mode {

int data;

} Node;

  • 标签(mode: mode 是结构体的标签名。在这种定义中,mode 是结构体类型的名称,但 Node 是通过 typedef 创建的别名。

  • 好处:

    • 标签的存在: 标签 mode 使得你可以在结构体类型的定义中引用自身(对于自引用结构体类型)。如果结构体内部有指向自身的指针时(如链表中的 next 指针),标签是必要的。
    • 自引用: 如果你需要在结构体中使用指向相同类型的指针(例如链表中的 next 和 pre),标签是必须的。

定义不带标签的结构体

 

typedef struct {

int data;// 不能在此处使用指向自身的指针,因为没有标签

} Node;

  • 无标签: 结构体没有指定标签名。在这种情况下,结构体只能通过 Node 类型进行引用。

  • 好处:

    • 简洁: 如果结构体类型不需要在其他地方引用(例如,内部定义结构体),或者结构体类型是临时的且只用于 typedef 生成别名时,可以省略标签。
    • 局部性: 当你不需要在结构体定义中引用自身时(例如,没有自引用的情况),不使用标签可以使定义更加简洁。

总结和应用场景

  1. 带标签的结构体:

    • 当结构体类型需要引用自身时,例如在链表、树等数据结构中。
    • 当你希望结构体在其他地方有额外的引用能力。
  2. 不带标签的结构体:

    • 当结构体类型仅用于定义和别名创建,且不需要自引用或外部引用时。
    • 当定义的结构体非常简单,仅用于某个特定的、局部的目的。

typedef用法:

例子:

关于typedef的别名定义

1、

2、

万能指针充当函数指针:

万能指针:空类型的指针void*p

万能指针能操作如何类型的指针,在使用前要做强制类型转换

指针的两个类型:1、指针的类型(变量的类型): (取代掉变量名就行了)

                             2、指针所指向的类型 指针要操作的数据:  (去掉变量名和*)

例:

const的使用:

1、*前的const写前写后没区别

所以 const  int x=1;和int const x=1;是等效的

作用是修饰数据类型,它是修饰指针所指向的数据的类型

所以const  int *x的 *x不能变

2、int const* x修饰的是指针变量,不能修改指针变量的指向(相当于x不能变)

就这两种情况,上述的四个示例都可以由这两种组合

数组指针和指针数组:

哪个在后面,他就是什么

整形数组:------->数组       拥有多个变量名有规律的整形变量

数组指针:------->指针                                                            :一般是用来操作二维或者多维数组

指针数组:------->数组       拥有多个指针名有规律的指针变量 组的  :一般是用来表示字符串的

函数指针的应用:

用作

[0基础必看][函数指针妙用]原来同学们并不知道我们的驱动接口怎么用_哔哩哔哩_bilibili

屏幕驱动里用结构体存储iic的函数指针,在屏幕驱动里只调用结构体里的函数,至此屏幕驱动与iic解耦,iic的绑定从编译阶段推迟到了运行阶段

http://www.lryc.cn/news/432732.html

相关文章:

  • 『功能项目』武器的切换实例【34】
  • github中action作用和讲解
  • 数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)
  • GIT | git提交注释自动添加信息头
  • React 全屏问题解决方案
  • Java JVM 垃圾回收算法详解
  • hadoop dfs web页面访问增加鉴权
  • LCP 485. 最大连续 1 的个数[lleetcode -11]
  • 关于宏任务的说法已经过时
  • Java箱与泛型
  • QT如何判断一个文件是否存在
  • Vim笔记
  • 宝塔部署Vue项目解决跨域问题
  • C++智能指针简述
  • 龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮
  • Android Camera系列(二):TextureView+Camera
  • DFS算法专题(一)——二叉树中的深搜【回溯与剪枝的初步注入】
  • AWS SES服务 Golang接入教程(排坑版)
  • Vite + Vue3 +Vant4出现Toast is not a function
  • 【MATLAB】模拟退火算法
  • 什么是Kubernetes RBAC?
  • 在Spring Boot中通过自定义注解、反射以及AOP(面向切面编程)
  • 安防监控视频平台LntonAIServer视频智能分析平台新增视频质量诊断功能
  • vscode从本地安装插件
  • Superset二次开发之新增复选框Checkbox筛选器
  • PromQL 语法
  • 掌握Go语言中的时间与日期操作
  • 4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)
  • spring数据校验Validation
  • Uniapp基于uni拦截器+Promise的请求函数封装