网络上有很多对于对于回调函数的解释,还有人做了一些很有意思的比喻,比如下面这个:
回调函数(callback)是什么? - no.body的回答 - 知乎
打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to register a callback function)。
但是其实对于C语言来说,只要记住回调函数就是函数指针,在C语言中回调函数只能通过函数指针实现,我觉得就好理解多了,参考:回调函数-百度百科
而且StackOverflow上面也有人回答,在C语言里面没有什么“回调” ,see:
callback StackOverflow
下面给一个geeksforgeeks上面的比较简单的回调函数的例子,see: callback in c
// A simple C program to demonstrate callback
#include<stdio.h>
void A()
{
printf("I am function A\n");
}
// callback function
void B(void (*ptr)())
{
(*ptr) (); // callback to A
}
int main()
{
void (*ptr)() = &A;
// calling function B and passing
// address of the function A as argument
B(ptr);
return 0;
}
上述代码的结果是
I am function A
按照前文中那个知乎上的回答,main函数调用了B(就相当于库函数),B需要main函数提供一个函数指针作为它的参数,也就是这里的&A,即A的地址,把A的地址传给B的过程就叫登记回调函数,A就是回调函数。