看一下这个例子吧,我是这样理解的:
网站设计、网站建设服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!
#include
"iostream.h"
#include
"windows.h"
typedef
void
(CALLBACK
*MyFun)(void);//回调函数定义
void
CALLBACK
callback()
//
回调函数
{
cout"****callback****\n";
}
void
Call_CallBack(MyFun
mycb)
{
cout"****Call_CallBack****\n";
mycb();
cout"__________________\n";
}
void
main()
{
Call_CallBack(callback);
}
//
其他人需要修改的话只要修改callback函数里的内容就行了,一般sdk封装后都会有回调,这样他人在调用sdk的时候就可以实现回调函数里的内容。
如果你需要理论的,网上搜回调函数,内容哈多随便看
回调函数 就是上层调用 设置下去
底层通过函数指针调用上层函数
多文件中才有用 单文件可以模拟
比如
#include stdio.h
typedef void (*pFuncCb) (int);//定义回调函数。
void callback1(int a)
{
printf("callback function1 is called and parameter = %d\n", a);//打印1
}
void callback2(int a)
{
printf("callback function2 is called and parameter = %d\n", a);//打印2
}
pFuncCb callback_function;
void lowerFunc(int n)
{
int i;
for(i = n; i n+10; i ++)
if(callback_function) callback_function(i);
}
int main()
{
callback_function = callback1;
lowerFunc(1);// 会打印十次 打印1, 1到10
callback_function =NULL;
lowerFunc(10);//没有打印。
callback_function = callback2;
lowerFunc(100);// 会打印十次 打印2, 100到110
return 0;
}
回调函数,顾名思义,也就是等该函数执行完了,会回去调用我们传进去的函数。
用到回调函数的地方有不少,像我见过的:SQLite中的一个函数,sqlite_exec函数名有没有记错我没什么印象了。待这个函数执行完毕后,会去调用我传进去的一个函数,一般回调函数都是有自己的参数列表格式的,再利用这个格式从回调函数中获取到我们需要的一些值。
typedef
struct
{
int
a;
void
(*pshow)(int);
}TMP;
void
func(TMP
*tmp)
{
if(tmp-a
10)//如果a10,则执行回调函数。
{
(tmp-pshow)(tmp-a);
}
}
void
show(int
a)
{
printf("a的值是%d\n",a);
}
void
main()
{
TMP
test;
test.a
=
1;
test.pshow
=
show;
func(test);
}
这只是举例,一般回调函数的用法为:
甲方进行结构体的定义(成员中包括回调函数的指针)
乙方定义结构体变量,并向甲方注册,
甲方收集N个乙方的注册形成结构体链表,在某个特定时刻遍历链表,进行回调。
callback函数定义回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
在计算机程序设计中,回调函数,或简称回调(Callback),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序:
例如:defmy_callback(input):print"functionmy_callbackwascalledwith%sinput"%(input,)defcaller(input,func):func(input)foriinrange(5):caller(i,my_callback)执行结果是:functionmy_callbackwascalledwith0inputfunctionmy_callbackwascalledwith1inputfunctionmy_callbackwascalledwith2inputfunctionmy_callbackwascalledwith3inputfunctionmy_callbackwascalledwith4input