C温故补缺(七):函数指针与回调函数
函数指针与回调函数
函数指针就是指向函数调用栈地址的指针,定义时须和函数的返回值类型,参数类型相同
如:
#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类似的参数,用于设置数据比较的方法
本文来自博客园,作者:Tenerome,转载请注明原文链接:https://www.cnblogs.com/Tenerome/p/Creview7.html