二、C语言里的函数指针

上一节里介绍了回调函数,模块A提供了该函数 然后模块A调用B B再返过来调用A提供的函数,再处理最后返回结果给A。晕了。还是画个图。一般调用情况:

图2-1

有回调函数的调用情况:

图2-2

这个过程既然清楚了,那么回调函数如何传给模块B,它和一般的参数不同,它是一个函数。在C语言里解决的方案是函数指针,所谓函数指针字面上也可以理解 即指向函数的指针。函数指针更详细的用法可以参见谭浩强老师编写的经典著作《C程序设计(第二版)》(好书啊)。比如上例中的MyBestChoice的函数声明是:

Ticket* MyBestChoice(Ticket[] ticketArray,int count)

输入参数是满足条件的票的数组和数组个数,返回的是最佳的票。那么函数指针的声明是

Ticket* (*p)(Ticket[] ticketArray,int count);

当然p可以直接指向MyBestChoice的函数p = MyBestChoice;函数指针还有一个很重要的特性是函数指针可以指向任何形参相同的函数,比如:

Ticket* 票贩子(Ticket[] ticketArray,int count)很多票,然后以高价买给你,通常返回值不为空。

Ticket* 火车站(Ticket[] ticketArray,int count)很多票,然后以正常价买给你,通常返回空。

这两个函数都可以用p指向,即p = 火车站;p = 票贩子。

不要小看这个特性,因为有了这个特性,可以对不同的函数实现统一的操作,请好好再比较一下例1-1和例1-2。

那么B模块想传递回调函数,那么他的最后一个形参要写成函数指针的形式。如下:

B ( Time , StartCity,EndCity , Ticket* (*p ) (Ticket[] ticketArray , int count) )

转载于:https://www.cnblogs.com/helloj2ee/archive/2008/12/02/1345847.html

木老师教笨笨课堂——系列讲座(从函数指针到委托) 二、C语言里的函数指针...相关推荐

  1. 木老师教笨笨课堂——系列讲座(从函数指针到委托) 三、C++语言里的函数指针...

    先来回顾一下,我们说函数指针有一个重要的特性,它可以指向任何形参相同的函数.这样可以用统一的方式去调用不同的函数.(这个我还是希望笨笨同学好好思考一下,我想也是程序思想的精髓之一吧),就好比武功秘籍中 ...

  2. 木老师教笨笨课堂——系列讲座(从函数指针到委托) 四、C#的委托

    四.C#的委托 ".Net以委托的形式实现了函数指针的概念."--<C#高级编程(第四版)> 现在看这句话,可能笨笨同学就有感觉了. 看书可能就是这样,想当初天山童姥的 ...

  3. 【软件测试自动化-QTP系列讲座 11】== AOM应用(一)+QuickTest+Automation ==

     Rss订阅IQuickTest(关于如何订阅?) GoogleReader订阅地址: http://feeds.feedburner.com/iquicktest 作者:zzxxbb112 时间:2 ...

  4. 原创:纯手工打造CSS像素画--笨笨熊系列图标

    纯手工打造CSS像素画--笨笨熊系列图标 作者:冰极峰 转载请注明出处 在cssplay网站看到有一组CSS像素画,于是也想摩仿一下,于是在网络上找到一组头像图标,看其结构比较简单,就拿它开刀吧!先看 ...

  5. vmware nat模式网络不通_笨笨狗教你如何解决VMware虚拟机桥接网络不通问题?

    笨笨狗教你如何解决VMware虚拟机桥接网络不通问题? 背景介绍 在我们日常使用Kali Linux时,有时候我们将虚拟机网络连接方式设置为桥接后发现虚拟机Kali Linux无法ping通网络,或者 ...

  6. 精准营销 工业品网络营销系列讲座第一课 张进老师主讲

    精准营销 <工业品网络营销>系列讲座第一课 工业品网络营销是相对于传统的消费品营销而言,它具有更多的是精准性,这种精准性体现在哪几个方面呢? 第一点:企业的网站建设和维护要体现它的精准性, ...

  7. 仪征市实验小学教师计算机课,仪征市“智慧课堂系列研讨活动”在我校成功举办...

    原标题:仪征市"智慧课堂系列研讨活动"在我校成功举办 为更好地筹备扬州市信息化教学能手大赛,进一步提升教师教育信息化应用能力,探索如何利用信息技术构建智慧课堂信息化环境,实施智慧教 ...

  8. 清华大数据系列讲座——大数据发展与区块链应用成功举办

    2018年9月15日,由清华-青岛大数据工程研究中心主办的"清华大数据系列讲座-大数据发展与区块链应用"在中国海洋大学成功举办.本此讲座邀请到了清华-青岛数据科学研究院执行副院长韩 ...

  9. 德州学院计算机吴,计算机与信息学院举办“博士讲堂”系列讲座

    11月7日上午九点,在明理楼0225教室,计算机与信息学院刘豪睿博士为学生作了题为"工业领域的相关开发技术-以运动控制为例"的报告. 刘老师首先为同学们介绍了运动控制工业产品的软件 ...

最新文章

  1. int main(int argc,char *argv[]),主函数的参数问题
  2. Spring Framework------version4.3.5-----Reference学习心得-----总结
  3. Facebook开源工具包LASER,支持93种语言
  4. cocos2dx[3.2](5) ——入口类AppDelegate.cpp
  5. Unhandled exception 0xC0000005: Access violation writing location
  6. c语言大作业菜单,C语言大作业:编写菜单控制猜商品价格程序
  7. Maximal Rectangle
  8. Linux 下 Shell 命令的分类及用法
  9. CodeForces - 1521B Nastia and a Good Array
  10. 04 grep正则表达式与shellscipt脚本编程
  11. 使用so动态链接库g++正确,gcc undefined reference错误
  12. Java自学和培训的区别
  13. 计算机硬件性能指标参考
  14. 十大淘宝搜索作弊行为
  15. python处理grd格式文件_Surfer的grd文件格式说明
  16. 尺寸公差分析尺寸链计算软件:新能源电池行业—模组散热系统之弹簧长度计算
  17. 二层交换机,三层交换机,四层交换机的区别
  18. 李兴平,世界站长第一人
  19. 名帖128 成亲王 楷书《心经》册
  20. 西门子S7-1200PLC和KTP700触摸屏通过USS协议控制MM420变频器

热门文章

  1. html如何读取config,获取config信息示例
  2. druid产生大量mysql的sleep连接
  3. 软件开发进度管理探析
  4. 建荣dm8261量产工具V1.8(12.06.19)
  5. EXSI自定义第三方驱动生成镜像——筑梦之路
  6. 2010年医师资格考试报名及考试时间
  7. 2020张宇1000题【好题收集】【第三章:一元函数积分学】
  8. 周易六十四卦——复卦
  9. CS01 BOM客制化屏幕增强
  10. 本题要求编写程序计算某年某月某日是该年中的第几天。