C温故补缺(七):函数指针与回调函数
2024-10-20 16:14:52
函数指针与回调函数
函数指针就是指向函数调用栈地址的指针,定义时须和函数的返回值类型,参数类型相同
如:
#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类似的参数,用于设置数据比较的方法
最新文章
- [译] C# 5.0 中的 Async 和 Await (整理中...)
- NSFileManager计算文件/文件夹大小
- win7平台下React-Native Android:Unable to upload some APKs
- IIS 8 下使用 WCF
- javaBean Request生命周期
- 我的常用mixin 之 px
- ASP.NET MVC中使用事务写法
- excel VLOOKUP函数的用法
- CSS3实现翻转菜单效果
- 存储结构中的对齐(alignment)
- c# 可以有多个Main()函数
- 【转】Android 4.2蓝牙介绍
- PopupWindow源码分析
- Help improve Android Studio by sending usage statistics to Google
- 基于html5 canvas 的强大图表插件【Chart.js】
- bzoj 2733: [HNOI2012]永无乡
- 织梦首页、列表页调用文章body内容的两种方法
- Jmeter读取文件中的值《一》
- 正则表达式匹配html标签里面的内容
- python爬虫之scrapy文件下载