16、C语言指针专题:函数指针

张开发
2026/5/31 5:22:11 15 分钟阅读
16、C语言指针专题:函数指针
一、函数指针的核心定义函数指针本质是“指向函数的指针变量”核心作用是通过指针间接调用函数。函数名本身就是函数的入口地址类似数组名是数组首地址因此函数指针可以存储这个地址进而通过指针操作调用对应的函数。函数指针的基本语法3种常用写法重点掌握前2种标准写法返回值类型 (*指针变量名)(参数列表);括号不可省略否则会被解析为“返回值为指针的函数”typedef简化写法typedef 返回值类型 (*指针类型名)(参数列表);后续可直接用该类型定义函数指针变量函数指针数组进阶返回值类型 (*指针数组名[数组长度])(参数列表);基础示例理解函数指针的赋值与调用二、函数指针的所有应用场景附通俗易懂程序段函数指针的核心价值是“解耦”和“灵活调用”所有应用场景都围绕这两个核心展开以下是全部常用场景每个场景均搭配极简实例无复杂逻辑专注函数指针的用法。场景1间接调用函数基础场景核心作用通过指针变量间接调用函数替代直接调用为后续灵活切换函数提供基础类似用遥控器控制电视而非直接按电视按钮。适用场景需要动态切换调用的函数时比如根据条件选择不同的计算方式。场景2作为函数参数传递核心场景核心作用将函数作为参数传递给另一个函数称为“回调函数”的基础让被调用函数可以灵活调用不同的传入函数实现“按需定制”。适用场景排序、遍历、事件响应等比如qsort函数的排序规则由用户通过函数指针传入。场景3作为函数返回值进阶场景核心作用让函数返回一个函数指针实现“根据条件返回不同的函数”进一步提升调用的灵活性。适用场景根据输入条件动态返回不同功能的函数比如根据运算符号返回加法、减法或乘法函数。场景4函数指针数组批量管理函数核心作用用数组存储多个同类型的函数指针实现“批量调用函数”简化代码类似用数组管理多个变量这里管理多个函数。适用场景有多个同参数、同返回值的函数需要循环调用或按索引调用比如菜单功能、计算器的多个运算。场景5实现回调函数实际开发高频场景核心作用回调函数是“被函数指针调用的函数”本质是场景2函数指针作为参数的延伸实现“底层函数调用上层函数”解耦底层逻辑和上层业务。适用场景排序qsort、定时器、信号处理、框架开发等底层函数只负责逻辑具体业务由上层回调函数实现。场景6用于动态库调用实际开发场景核心作用动态库.dll/.so文件加载后无法直接调用其内部函数需通过函数指针获取函数地址进而调用实现“动态加载函数”。适用场景软件插件、模块化开发比如播放器加载不同的解码插件通过函数指针调用插件中的解码函数。说明实例以Windows系统为例使用LoadLibrary、GetProcAddress函数Linux系统类似使用dlopen、dlsym。场景7实现多态C语言模拟面向对象核心作用C语言本身不支持面向对象但可以通过“结构体函数指针”模拟多态不同对象调用同一接口执行不同的实现。适用场景需要实现面向对象的简单逻辑比如动物类的“叫”接口猫和狗有不同的实现。三、函数指针的注意事项关键提醒函数指针的参数列表、返回值类型必须与指向的函数完全一致否则会出现编译错误或运行异常。函数指针可以赋值为NULL空指针调用前需判断是否为NULL避免野指针访问程序崩溃。typedef简化函数指针时注意括号的位置比如typedef int (*Func)(int);是函数指针类型typedef int (*Func)(int);与typedef int *Func(int);完全不同后者是“返回int*的函数”。

更多文章