目录
8.回调函数
释义
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现。
机制
⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
作用
因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。
回调函数在实际中有许多作用。假设有这样一种情况:我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序、快速排序、shell排序、shake排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,能让库可用于多种数据类型(int、float、string),此时,可以使用函数指针,并进行回调。
回调可用于通知机制。例如,有时要在A程序中设置一个计时器,每到一定时间,A程序会得到相应的通知,但通知机制的实现者对A程序一无所知。那么,就需一个具有特定原型的函数指针进行回调,通知A程序事件已经发生。实际上,API使用一个回调函数SetTimer来通知A程序。如果没有提供回调函数,它还会把一个消息发往程序的消息队列。(摘自百度百科)
qsort排序函数
实例
其中cmp是函数指针,cmp指向的是:排序时,用来比较两个元素的函数。需要自己编写。函数返回值:无
其传参过程如下:
1)传递数组地址
2)确定数组元素个数
3)确定元素大小
4)通过函数指针调用cmp函数
cmp函数
接收cons void* 空类型指针e1,e2的函数,返回值为整型。
实例
结果
详解此参数
参数为函数指针(名为compare的函数,该函数参数为空类型指针1,空类型指针2,返回值为整数)
compare函数须自行编写
传递指针p1,指针p2.
1)传参过程已经由数组名作为指针,找到比较对象。
2)传递元素个数
3)传递单个元素大小
4)调用cmp函数(qsort函数可通过回调cmp函数实现排序)
整型数组排序
实例
结果
结构体排序
浮点型数组排序
注:结构体排序与浮点型排序引用自CSDN博主「芒果再努力」