回调函数时通过函数指针进行调用的函数。你把一个函数的指针作为参数传递给另外一个函数,当这个指针被用来调用其指向的函数时,我们就说这是一个回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
为什么要使用回调函数呢?
因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。
回调可用于通知机制,例如,有时要在程序中设置一个计时器,每到一定时间,程序会得到相应的通知,但通知机制的实现者对我们的程序一无所知。而此时,就需有一个特定原型的函数指针,用这个指针来进行回调,来通知我们的程序事件已经发生。实际上,SetTimer() API使用了一个回调函数来通知计时器,而且,万一没有提供回调函数,它还会把一个消息发往程序的消息队列。
一个简单的回调函数
下面是一个简单的回调函数的示例:
#include <stdio.h>
//返回值(*指针名)(参数列表)
typedef int (*callback)(int,int);
//回调函数
int ADD(int (*callback)(int,int), int a, int b)
{
return (*callback)(a,b);//此处回调add函数...
}
//普通函数
int add(int a, int b)
{
return a + b;
}
int main()
{
printf("%d\n",add(1,2));
printf("%d\n",A