原文链接:https://blog.csdn.net/u011116085/article/details/108106052
一个人C语言功底强不强,不是看他写的代码注释够不够全,代码逻辑够不够清晰,看下他对函数指针的理解和使用就可以了。我曾经被一家公司面试两次,两次面试的内容都有对函数指针的使用理解。函数指针的概念上很简单,无非也就是指针,专门指向函数而已。但是什么时候能用到它,用它可以带来什么好处,这就是考察个人的能力了,涉及到多方面。
在哪些应用场合可以用到函数指针呢
第一,软件分层设计:如果个人代码没有软件分层设计,而是一味堆砌,那么代码的扩展性、可读性、通用性必然比较差。我们上下层讲究的是"纵向依赖、横向独立",上层可以直接调用下层函数接口,而下层是不能直接调用上层接口的,如何解决下层实现对上层接口的代用呢,通过函数指针实现回调函数,实现下层对上层接口的调用,这样原则上也遵循上层实现对下层处于屏蔽。像各种嵌入式操作系统比如ucos、freertos钩子函数,均通过回调函数实现对未知用户的具体实现的调用。简而言之,便于软件分层设计,降低耦合度,使得接口与实现分开。
第二,写库:自己写一些基于数据结构的库函数,设计好了一个函数框架,但是设计初期并不知道自己的函数会被如何使用,所以库作为管理员是不知道用户具体要执行什么操作的。比如我们写一个基于链表的库,要实现fetch功能实现用户查找信息,用户通过搜索关键字,但是管理员不知道用户是通过输入名字呢还是输入编号或者是身份证号来找用户的,那么这时用管理员只负责提供一个搜索关键字的函数指针,具体的关键字功能由用户提供,就达到了一个接口对多功能的支持。简而言之,就是利于系统抽象。
第三,引用不在代码段中的函数
此功能在嵌入式系统中经常使用。我们知道,我们写的用户程序的code是存放在代码段中的,在嵌入式系统中,一般情况下是存放在flash中的。什么叫不在代码段中的函数?很多微控制器在出厂前会将一些功能函数(系统函数)固化在rom中(类似于PC机中的BIOS),如Flash擦写功能,Flash Copy功能。而我们写的代码是不认识这些函数的,不能直接使用函数名调用。所以,当我们想在用户程序中调用这些系统函数时,就只能使用函数指针的方式,通过将系统函数的入口地址传给函数指针,来达到调用rom中程序的目的。这些系统函数一般都会在官方手册中给出功能,返回值类型和参数列表(转之https://blog.csdn.net/wudidajundui/article/details/80411594 )
第四,函数指针与指针数据的结合可以实现典型的表驱动:
通过将相同类型的函数以指针形式存储在数组中,我们在调用过程中就可以直接通过索引执行相应的函数了,这样的执行效率比起if else的嵌套实现会大大提高效率。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)