底层通过函数指针调用上层函数
多文件中才有用 单文件可以模拟
比如
#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
}
typedefstruct
{
int
a
void
(*pshow)(int)
}TMP
void
func(TMP
*tmp)
{
if(tmp->a
>10)//如果a>10,则执行回调函数。
{
(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个乙方的注册形成结构体链表,在某个特定时拍耐仔刻遍历链表,进行回调。袭汪
看一下这个例子吧,我是这样理解的:#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的时候就可以实现回调函数里的内颤悄容。
如果旁氏你需要理论的,网上搜回调函数,内容哈多随便看
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)