函数指针与回调函数

函数指针就是指向函数调用栈地址的指针,定义时须和函数的返回值类型,参数类型相同

如:

#include<stdio.h>
int max(int x,int y){
return x>y?x:y;
} int main(){
int (*funp)(int,int);
funp=max;
printf("%d ",funp(2,8));
}

指向一个确定的函数后,就可以通过指针调用函数,在实际执行中还是max函数栈,并不是funp函数栈

作用1: 统一参数相同功能大致不同的函数,降低耦合度,不必放在多个文件中,在一定程度上体现了多态性

如:

#include<stdio.h>
int max(int x,int y){
return x>y?x:y;
} int min(int x,int y){
return x<y?x:y;
} int main(){
int (*funp)(int,int);
funp=max;
printf("max=%d ",funp(2,8));
funp=min;
printf("min=%d ",funp(2,8));
}

作用2 :作为回调函数

回调函数:当一个函数指针作为另一个函数的参数时,这个指针指向的函数就叫回调函数

#include<stdio.h>
int sayHello(){
printf("Hello ");
} void init(int (*funp)()){
funp();
} int main(){
init(sayHello);
printf("\n");
}

在功能上,回调函数和普通调用函数没差,回调函数存在的意义就在于其作为参数可变.在项目开发过程中,函数库和主程序一般时分开的,当库函数中的函数不能满足需求时,如果不想改库函数源码,就可以重新写新的库函数,调用时只需传入新的回调函数即可.

其实回调函数是一种破坏系统结构的设计思路,只是迫不得已的修改,一旦文件中出现多回调函数,那么说明之前的函数库设计不合理,需要重新构建函数库

更多的,函数指针还是用于多态,如c 标准库stdlib中的快速排序函数qsort会要求一个与strcmp类似的参数,用于设置数据比较的方法

最新文章

  1. [译] C# 5.0 中的 Async 和 Await (整理中...)
  2. NSFileManager计算文件/文件夹大小
  3. win7平台下React-Native Android:Unable to upload some APKs
  4. IIS 8 下使用 WCF
  5. javaBean Request生命周期
  6. 我的常用mixin 之 px
  7. ASP.NET MVC中使用事务写法
  8. excel VLOOKUP函数的用法
  9. CSS3实现翻转菜单效果
  10. 存储结构中的对齐(alignment)
  11. c# 可以有多个Main()函数
  12. 【转】Android 4.2蓝牙介绍
  13. PopupWindow源码分析
  14. Help improve Android Studio by sending usage statistics to Google
  15. 基于html5 canvas 的强大图表插件【Chart.js】
  16. bzoj 2733: [HNOI2012]永无乡
  17. 织梦首页、列表页调用文章body内容的两种方法
  18. Jmeter读取文件中的值《一》
  19. 正则表达式匹配html标签里面的内容
  20. python爬虫之scrapy文件下载

热门文章

  1. Vben Admin 源码学习:状态管理-角色权限
  2. gem5 使用记录, 基于理解来写个最简单的计数器程序
  3. VUE:引入腾讯地图并实现轨迹动画
  4. 使用读写分离模式扩展 Grafana Loki
  5. CentOS7下yum安装GitLab-CE
  6. Ubuntu20.04和Docker环境下安装Redash中文版
  7. 第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号
  8. 微服务 Zipkin 链路追踪原理(图文详解)
  9. 一文理解Cookie、Session
  10. KNN算法之集美大学