C温故补缺(七):函数指针与回调函数

2023-02-12,,,,

函数指针回调函数

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

如:

#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温故补缺(七):函数指针与回调函数的相关教程结束。

《C温故补缺(七):函数指针与回调函数.doc》

下载本文的Word格式文档,以方便收藏与打印。