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

结构体嵌套函数指针

这次来记录一下结构体嵌套函数指针

这个知识点想了2天终于搞懂了。

先看代码,试着理解一下,不理解再看我后面的解释。

 

解释:

首先,和平常创建一个结构体一样,唯独不同的就是里面的变量是一个函数指针,关于函数指针的内容,原理,我这里就不多解释说明了,去搜一下都有很多。我们就简单的理解为:函数指针=指向函数地址的指针变量。

所以这里的 void (*m_PrintInfo)();是一个变量,是一个变量,是一个变量(重要的事情说三遍)!

typedef struct{
    char m_title[20];
    char m_author[20];
    int m_pages;
    void (*m_PrintInfo)();
} BookType;

这个变量是干嘛的呢?是用来存放函数的入口地址的,每个函数都是有入口地址的。

BookType KEY[3]={
	{"KEY1","Author1",5,ON_OFF_Pro},
	{"KEY2","Author2",10,CAL_Pro},
	{"KEY3","Author3",15,MENU_Pro},
};

这段代码,定义了3结构体数组,

1.每个数组里面都有该结构体的成员

2.每个数组里面都有该结构体的成员

3.每个数组里面都有该结构体的成员(重要的事情说三遍)!

也就是说,都有这些元素,这样好理解了吧。

KEY[0].m_title                            KEY[1].m_title                         KEY[2].m_title

KEY[0].m_author                       KEY[1].m_author                    KEY[2].m_author

KEY[0].m_pages                       KEY[1].m_pages                     KEY[2].m_pages

好,那么我们来看下面的这行代码

KEY[0].m_PrintInfo();

那这里是调用了哪个函数呢?通过代码可以知道,是调用了ON_OFF_Pro这个函数。所以执行调用这个结构体成员变量的时候,会调用这个函数,因为一开始已经把函数的入口地址分配好了,只需要调用结构体成员变量就能够实现调用函数。

-------------------------------------------------------- 分界线---------------------------------------------------------------

下面来看看实际项目按键的用法

 

 说明:以上所有内容均为自己笔记,仅让自己理解为主导,如果对你有帮助,那就最好不过,共勉!

相关文章:

  • 基于Xlinx的时序分析与约束(4)----主时钟约束
  • Arcgis使用教程(十三)ARCGIS地图制图之地图输出参数设置详解
  • QT中Qthread线程彻底销毁的实例与注意事项(防止线程资源内存泄露)
  • PCL点云处理之曲面法线估计(八十二)
  • MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《1》
  • 数据库系统概论第七章(数据库设计)知识点总结(1)—— 概述
  • 【QT】信号与槽
  • 河道非法采砂识别系统 yolov5
  • JavaWeb语法四:多线程案例
  • Unity使用飞书在线表格做配置表
  • 计算机网络最新复习【太原理工大学】
  • 视频异常检测技术研究进展
  • 【Java 数据结构】-二叉树OJ题
  • 【C++天梯计划】1.14 区间最值算法(RMQ)
  • C++基础之提高5
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【Amaple教程】5. 插件
  • C学习-枚举(九)
  • es6(二):字符串的扩展
  • ES6核心特性
  • gulp 教程
  • If…else
  • Java到底能干嘛?
  • JDK9: 集成 Jshell 和 Maven 项目.
  • leetcode46 Permutation 排列组合
  • node 版本过低
  • python学习笔记 - ThreadLocal
  • React组件设计模式(一)
  • Shell编程
  • 半理解系列--Promise的进化史
  • 飞驰在Mesos的涡轮引擎上
  • 看域名解析域名安全对SEO的影响
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • mysql面试题分组并合并列
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #### go map 底层结构 ####
  • $forceUpdate()函数
  • .net core 连接数据库,通过数据库生成Modell
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net中应用SQL缓存(实例使用)
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /usr/bin/env: node: No such file or directory
  • ?php echo ?,?php echo Hello world!;?
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @取消转义
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [BSGS算法]纯水斐波那契数列
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [EFI]英特尔 冥王峡谷 NUC8i7HVK 电脑 Hackintosh 黑苹果efi引导文件
  • [JS入门到进阶] 7条关于 async await 的使用口诀,新学 async await?背10遍,以后要考!快收藏
  • [LeetCode] Contains Duplicate
  • [noip2015 d1t2] 信息传递
  • [Oh My C++ Diary]用cout输出流保留输出小数位数的方法