一般函数形式: function a(char *a, String b)
:接收的参数是一般类型;
特殊函数:function b(char *a, function c)
:接收的其中一个参数是函数(只是为了表述方便这么写,实际应该是指向函数的指针),这个函数c就被称为回调函数
- 即要执行函数b了,说明执行条件已经满足,再执行函数c
- 如果把函数指针作为参数传递给另一个函数,当这个指针被用来调用所指向的函数时,就称之为回调函数。
先看一段随便写的回调函数代码示例:
#include <iostream>
typedef int (*PF)(char *);
int mprint_pf(char *s) {
printf("mprint_pf: %s\n", s);
return 0;
}
int mprint(char *s1, PF pf) {
printf("mprint: %s\n", s1);
(*pf)(s1);
pf(s1);
return 0;
}
int main() {
mprint("test", mprint_pf);
return 0;
}
输出结果为
mprint: test
mprint_pf: test
mprint_pf: test
那么和直接在mprint
函数体里面调用mprint_pf
有什么区别呢,在这里用argument:mprint_pf
来初始化mprint
的parameter:pf
,相比直接在函数体里调用mprint_pf
,多了一种时机已到的含义,正因为时机已到,才用mprint_pf
来初始化pf
,而不是置空或者用别的函数来初始化;或者说在函数体里面调用pf(s1)
,用于初始化parameter的argument不同,调用pf(s1)
的效果也不同。