[C语言] 函数指针有什么用呢?感觉还不如直接调用函数呢。

[复制链接]
 楼主| yanghelovehuang 发表于 2018-7-24 10:16 | 显示全部楼层 |阅读模式
见好多函数如:int a(int a, int b)
main()

int (*p)(int a, int b) = a;
(*p)(1, 2);          //调用函数指针
a(1, 2);       //这样直接调用不是更方便吗?反而觉得函数指针更麻烦了。
所以函数指针的作用是什么呢?


宇容创行 发表于 2018-7-24 10:22 | 显示全部楼层
别看垃圾教材了,找点大型开源代码看看
wsmysyn 发表于 2018-7-24 10:41 | 显示全部楼层
本帖最后由 wsmysyn 于 2018-7-24 10:54 编辑

前段时间刚好在项目里用了一下函数指针数组,

我大概有20几个测试函数需要根据参数选择执行不同的测试。比如0x00 - 0x20之间的数选择相应的函数去执行

这些测试函数都是相同返回类型,没有参数的。

将函数指针数组一一赋值。。调用的时候只需要这样,就完成了函数的调用

比用switch case写起来方便多了;起码代码行数要少很多。30个函数也就只需要30行的赋值加上图片上一个if语句块就可以;switch case 写的话最少要×3;而且函数多了,维护起来也是比较烦

另外,C/C++的回调函数,其实也是传递的函数的地址,也就是函数指针






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
airwill 发表于 2018-7-24 10:47 | 显示全部楼层
楼上说得有道理, 函数指针对于软件的灵活度上有很大的帮助
不要坐井观天, 你不知道的就一定是没有用的
ayb_ice 发表于 2018-7-24 11:43 | 显示全部楼层
函数指针可以指向不同的函数,也就可以调用不同的函数,可以动态修改
linqing171 发表于 2018-7-24 12:26 | 显示全部楼层
比如界面库里的事件,做库的时候不知道将来项目会在事件的处理里面写什么代码。所以预留个指针,将来做应用程序的时候,只要是给这个指针赋值就可以了。
雪山飞狐D 发表于 2018-7-24 13:41 | 显示全部楼层
本帖最后由 雪山飞狐D 于 2018-7-24 13:43 编辑

   函数指针数组可以存放在内存,各种消息和状态传递什么的提取标号比较方便把。。。否则都是散乱的函数,怎么找?
Leeone 发表于 2018-7-24 14:20 | 显示全部楼层
你还没找到实际的应用场景,多体会下楼上的例子就懂了
xiaohua880123 发表于 2018-7-24 15:52 | 显示全部楼层
为了让别人看不懂你的代码,为了让程序变得复杂和高端,为了体现出你的B格和价值。函数数组指针,函数指针数组,函数数组,链表,指针数组等等,这些你多用用就知道它们的用处了。保证一不小心连程序怎么飞了都不知道.
 楼主| yanghelovehuang 发表于 2018-7-24 16:17 | 显示全部楼层
Leeone 发表于 2018-7-24 14:20
你还没找到实际的应用场景,多体会下楼上的例子就懂了

谢谢大神们的回复,谢谢啦
 楼主| yanghelovehuang 发表于 2018-7-24 16:17 | 显示全部楼层
wsmysyn 发表于 2018-7-24 10:41
前段时间刚好在项目里用了一下函数指针数组,

我大概有20几个测试函数需要根据参数选择执行不同的测试。比 ...

谢谢大神能够回复 谢谢
caijie001 发表于 2018-7-24 20:47 | 显示全部楼层
不要自己觉得没用就坐井观天了,多学习才是王道
小小电子爱好者 发表于 2018-7-24 20:52 | 显示全部楼层
假设你已经知道函数指针的写法和用法。
那么意思就是, 你有了一只手,可以用来装备并切换武器打怪,比如可以装备刀子,或者装备棍子。当你的武器只有一种或者比较少的时候,可能这只手切换武器的功能不常用到。当到了后期,你的武器多了,那你因为有了这只能装备并切换武器的手,而可以更有效率的打怪。   --------很有意思的一个解释
Prry 发表于 2018-7-24 22:13 | 显示全部楼层
功能单一的程序估计看不到函数指针。函数指针常用于回调、驱动分层,比如Linux驱动源码大部分都用了函数指针。线程间通信、数据库回调也用到很多函数指针。
拿单片机来说,比如实现一根模拟i2c,你可以用原子开发板那种方式(也是网上大部分那种),但我要实现10根模拟i2c呢,当然公司里面也见过老代码是直接复制n份i2c代码。但如果用了函数指针的方式,我们就可以“复用”代码,把时序部分抽象出来,通过函数指针的方式调用,哪怕需要使用n根i2c总线,也可以方面实现。同时也方便移植到不同硬件MCU上。复用代码比复制代码好使多了!
参考场景:https://blog.csdn.net/qq_20553613/article/details/78878211
               https://blog.csdn.net/qq_20553613/article/details/81152511

评论

代码写的很棒。  发表于 2018-7-25 15:51
Prry 发表于 2018-7-24 22:15 | 显示全部楼层
xiaohua880123 发表于 2018-7-24 15:52
为了让别人看不懂你的代码,为了让程序变得复杂和高端,为了体现出你的B格和价值。函数数组指针,函数指针 ...

点个LED灯用不了函数指针,真正功能复杂的程序,函数指针大有好处。
coody 发表于 2018-7-24 23:37 | 显示全部楼层
如果认为没有用就大错特错了。

经常在多界面使用函数指针数组。
一路向北lm 发表于 2018-7-25 07:43 来自手机 | 显示全部楼层
可以传递地址,前者做不到
qscdianzhi 发表于 2018-7-25 08:54 | 显示全部楼层
ayb_ice 发表于 2018-7-24 11:43
函数指针可以指向不同的函数,也就可以调用不同的函数,可以动态修改

一语中的
z_no1 发表于 2018-7-25 09:08 | 显示全部楼层
IAP跳转时,你必须得用函数指针,因为这时的程序还不存在呢.
 楼主| yanghelovehuang 发表于 2018-7-25 09:23 | 显示全部楼层
caijie001 发表于 2018-7-24 20:47
不要自己觉得没用就坐井观天了,多学习才是王道

哥哥 我就是不明白才发帖求大神解释的,这不算学习? 你指的学习只能自己在家做书呆子不交流?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

324

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部