打印
[C语言]

函数指针有什么用呢?感觉还不如直接调用函数呢。

[复制链接]
7243|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
见好多函数如: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++的回调函数,其实也是传递的函数的地址,也就是函数指针






485815b5692791e9eb.png (12.39 KB )

485815b5692791e9eb.png

使用特权

评论回复
地板
airwill| | 2018-7-24 10:47 | 只看该作者
楼上说得有道理, 函数指针对于软件的灵活度上有很大的帮助
不要坐井观天, 你不知道的就一定是没有用的

使用特权

评论回复
5
ayb_ice| | 2018-7-24 11:43 | 只看该作者
函数指针可以指向不同的函数,也就可以调用不同的函数,可以动态修改

使用特权

评论回复
6
linqing171| | 2018-7-24 12:26 | 只看该作者
比如界面库里的事件,做库的时候不知道将来项目会在事件的处理里面写什么代码。所以预留个指针,将来做应用程序的时候,只要是给这个指针赋值就可以了。

使用特权

评论回复
7
雪山飞狐D| | 2018-7-24 13:41 | 只看该作者
本帖最后由 雪山飞狐D 于 2018-7-24 13:43 编辑

   函数指针数组可以存放在内存,各种消息和状态传递什么的提取标号比较方便把。。。否则都是散乱的函数,怎么找?

使用特权

评论回复
8
Leeone| | 2018-7-24 14:20 | 只看该作者
你还没找到实际的应用场景,多体会下楼上的例子就懂了

使用特权

评论回复
9
xiaohua880123| | 2018-7-24 15:52 | 只看该作者
为了让别人看不懂你的代码,为了让程序变得复杂和高端,为了体现出你的B格和价值。函数数组指针,函数指针数组,函数数组,链表,指针数组等等,这些你多用用就知道它们的用处了。保证一不小心连程序怎么飞了都不知道.

使用特权

评论回复
10
yanghelovehuang|  楼主 | 2018-7-24 16:17 | 只看该作者
Leeone 发表于 2018-7-24 14:20
你还没找到实际的应用场景,多体会下楼上的例子就懂了

谢谢大神们的回复,谢谢啦

使用特权

评论回复
11
yanghelovehuang|  楼主 | 2018-7-24 16:17 | 只看该作者
wsmysyn 发表于 2018-7-24 10:41
前段时间刚好在项目里用了一下函数指针数组,

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

谢谢大神能够回复 谢谢

使用特权

评论回复
12
caijie001| | 2018-7-24 20:47 | 只看该作者
不要自己觉得没用就坐井观天了,多学习才是王道

使用特权

评论回复
13
小小电子爱好者| | 2018-7-24 20:52 | 只看该作者
假设你已经知道函数指针的写法和用法。
那么意思就是, 你有了一只手,可以用来装备并切换武器打怪,比如可以装备刀子,或者装备棍子。当你的武器只有一种或者比较少的时候,可能这只手切换武器的功能不常用到。当到了后期,你的武器多了,那你因为有了这只能装备并切换武器的手,而可以更有效率的打怪。   --------很有意思的一个解释

使用特权

评论回复
14
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

使用特权

评论回复
评论
qinlu123 2018-7-25 15:51 回复TA
代码写的很棒。 
15
Prry| | 2018-7-24 22:15 | 只看该作者
xiaohua880123 发表于 2018-7-24 15:52
为了让别人看不懂你的代码,为了让程序变得复杂和高端,为了体现出你的B格和价值。函数数组指针,函数指针 ...

点个LED灯用不了函数指针,真正功能复杂的程序,函数指针大有好处。

使用特权

评论回复
16
coody| | 2018-7-24 23:37 | 只看该作者
如果认为没有用就大错特错了。

经常在多界面使用函数指针数组。

使用特权

评论回复
17
一路向北lm| | 2018-7-25 07:43 | 只看该作者
可以传递地址,前者做不到

使用特权

评论回复
18
qscdianzhi| | 2018-7-25 08:54 | 只看该作者
ayb_ice 发表于 2018-7-24 11:43
函数指针可以指向不同的函数,也就可以调用不同的函数,可以动态修改

一语中的

使用特权

评论回复
19
z_no1| | 2018-7-25 09:08 | 只看该作者
IAP跳转时,你必须得用函数指针,因为这时的程序还不存在呢.

使用特权

评论回复
20
yanghelovehuang|  楼主 | 2018-7-25 09:23 | 只看该作者
caijie001 发表于 2018-7-24 20:47
不要自己觉得没用就坐井观天了,多学习才是王道

哥哥 我就是不明白才发帖求大神解释的,这不算学习? 你指的学习只能自己在家做书呆子不交流?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

324

帖子

1

粉丝