Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8991
  • 博文数量: 1
  • 博客积分: 31
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-18 01:00
文章分类
文章存档

2012年(1)

我的朋友
最近访客

分类: C/C++

2012-02-20 21:48:40

关于回调函数。
一般来说,回调是与注册是一对的。你先把函数地址注册给我,我到需要的时候就会回调这个函数。

其实只要记住一条,函数其实也有地址,回调函数注册函数都是用的函数的地址。。函数名就是个函数的地址而已。。

比如说A.h中有如下代码:
typedef int (*function)(int,int);/*重定义一个类型,该类型为这样的一个函数指针*/

struct callback_function
{
function callback;/*定义一个函数指针*/
/*当然,也可以直接 int (*callback)(int,int);和上面的是一样的效果*/
};

然后在B.c中有如下代码:
int max(int a,int b)
{
return ((a>b)?a:b);
}

pstdata = (struct callback_function*)malloc(sizeof(struct callback_function));
memset(pstdata,0,sizeof(struct callback_function));
pstdata.callback = max ;

然后将pstdata的值传给A.c,在A.c中就可以直接用pstdata->callback(a,b)了。

这样做的好处是可以实现我不知道你函数叫什么名字,但是我知道我在具体环境该掉这个函数就可以了。。回调函数实现了通用性。
阅读(1777) | 评论(1) | 转发(1) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~

桔色花朵2012-02-21 22:51:45

恩、一般来说,回调是与注册是一对的