函数指针相关知识 zhangyunxin411 2026.9.51. 什么是函数指针函数指针实际上就是一种指针指向的是函数比如int(*p)(int,int);// 表示指针p指向一个参数为(int, int)返回值为int的函数函数指针怎么用函数指针就是一种指针类型要使用同样需要声明和定义intfun(inta,intb){...}int(*p)(int,int);pfun;利用 typedef 对函数指针起别名顺便归纳一下 typedef 的写法总体上就是声明一个该类的对象然后将变量名改为要起的别名就行// 比如要给一般的变量、指针变量起别名inta;// 声明typedefintI;// 别名Iint*p;// 声明typedefint*POINT;// 别名POINTstructdata{inti;charc;}stu;// 声明typedefstructdata{inti;charc;}DATA;// 别名DATAint*array[10];// 指针数组typedefint*ARRAY[10];int(*array)[10];// 数组指针typedefint(*POINT)[10];那么同样的函数指针也能这么写在之后的操作中会发现这么写很方便:typedefint(*FUN)(int,int);接下来总结函数指针的主要用途作为参数、作为返回值2. 函数指针作为参数函数作为参数很常见比如各种回调函数。只需要将一个函数指针作为参数传入回调函数就可以调用不同的函数比如voidfun1(){...}voidfun2(){...}voidcall_fun(void(*p)()){p();}call_fun(fun1);call_fun(fun2); #3.函数指针作为返回值 为什么要执行一个函数再让这个函数返回一个函数呢有什么意义主要意义有两个1.可以根据输入参数/状态动态决定要执行哪一个函数。当然你也可以用if-else实现但是当状态/参数多的时候代码会变得冗长2.在面向对象编程中有的函数被封装此时通常会通过这种方法来通过一个外部的函数接口来调用内部的私有方法 对于1给出下面的一个命令分发器的例子 c// -----命令对应的函数-----voidled_on(){printf(LED ON!);}voidled_off(){printf(LED OFF!);}voidmotor_run(){printf(MOTOR RUN!);}typedefvoid(*FUN)(void);#defineCMD_NUM3// -----两个用于维护的数组-----char*cmd_name[CMD_NUM]{led on,led off,motor run};FUN cmd_handel[CMD_NUM]{led_on,led_off,motor_run};// -----命令分发器代码-----FUNcmd_search(char*str){FUN pNULL;inti0;for(i0;iCMD_NUM;i){if(strcmp(str,cmd_name[i])0){pcmd_handel[i];returnp;}}returnp;}intmain(){charstr[10];fgets(str,10,stdin);str[strcspn(str,\n)]\0;FUN pcmd_search(str);if(p!NULL)p();return0;} 在上面的例子中命令分发器逻辑不需要修改当增删命令时只需要修改两个数组即可甚至数组和处理函数可以变成配置数据程序启动时动态加载实现在不重启系统的情况下动态增删命令。

相关新闻

最新新闻

嵌入式性能优化:深度解析ARM VFMA指令的生成与实战

嵌入式性能优化:深度解析ARM VFMA指令的生成与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 8:06:18
【STM32】 深度解析输入模式(原理+电路分析)

【STM32】 深度解析输入模式(原理+电路分析)

STM32 输入模式深度详解 1. 上拉下拉输入(深度版)1.1 数字输入通路整体架构所有数字输入模式共用同一条硬件通路,从引脚到寄存器共经过四级结构:┌───────────────── 外部物理引脚 ──────────────…

2026/9/6 8:06:18
哪些AI能满足企业级办公需求?

哪些AI能满足企业级办公需求?

企业引入AI办公工具,不再是简单采购通用大模型账号,核心要看工具能否适配团队协作流程、保障内部数据安全,并且可以落地真实业务任务。不少团队直接使用通用AI产品,会遇到权限管控缺失、输出无法贴合业务、多成员协同混乱等问题。…

2026/9/6 8:06:18
193、多机通信与分布式部署:ROS2 DDS与gRPC在多机器人协同

193、多机通信与分布式部署:ROS2 DDS与gRPC在多机器人协同

193、多机通信与分布式部署:ROS2 DDS与gRPC在多机器人协同 昨晚在实验室调三台机器人的协同搬运,折腾到凌晨两点。问题出在ROS2的DDS发现机制上——三台机器人在同一个Wi-Fi下,节点互相看不到。我一度以为是防火墙问题,后来发现是DDS的发现协议默认走多播,而实验室的AP禁…

2026/9/6 8:06:18
AI视频生成教程:从一句话到可发布成片的完整操作路径

AI视频生成教程:从一句话到可发布成片的完整操作路径

AI 视频生成的核心不是找到某一个””最强模型””,而是选对主链路工具把想法变成可编辑的初版内容,再按需补充后期剪辑和单点能力。本文以一个 60 秒知识短片为例,拆解从输入一句话到交付成片的完整操作流程,主链路使用小云雀 AI…

2026/9/6 8:06:18
什么是终端安全防护系统?跳出概念,从运维落地视角拆解核心定位与能力边界

什么是终端安全防护系统?跳出概念,从运维落地视角拆解核心定位与能力边界

内网安全整改项目做多了,经常遇到一个基础问题:不少运维人员认为,给电脑装了杀毒软件,就等同于部署了终端安全防护系统。等到出现图纸外泄、外来 U 盘带入勒索病毒、员工私自安装不明软件等事件之后,才发现现有产品缺少…

2026/9/6 8:01:18