C语言函数注册,回调
2016-06-03 22:06
447 查看
回调函数
http://baike.baidu.com/link?url=HvKA5lJWZHB48k2jrauxcHfVVZnNOSN9x3wBczULEtndRKDio9DhCNATcsvA2-oAH_u7BFtyr-Tks6oktiHLoa
如下运行截图
![](https://img-blog.csdn.net/20160603220525517)
在写自定义的二叉树,如平衡二叉树、红黑树时,可以自定义存储数据类型,给个比较的函数管理器(cmp_fcb),释放内存的管理器(release_fcb)等,主要是灵活,方便。类似的使用很多。。。
http://baike.baidu.com/link?url=HvKA5lJWZHB48k2jrauxcHfVVZnNOSN9x3wBczULEtndRKDio9DhCNATcsvA2-oAH_u7BFtyr-Tks6oktiHLoa
#include <stdio.h> #include <stdlib.h> int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } /* 函数指针 */ typedef int (*fcb_func)(int a, int b); typedef struct mydata { int a, b; fcb_func fcb; /* 函数管理器 */ } mydata_t; /* 创建时传入相应的函数管理器 */ mydata_t* mydata_create(fcb_func out_fcb) { mydata_t *data = (mydata_t *)malloc(sizeof(mydata_t)); data->fcb = out_fcb; data->a = 0; data->b = 0; return data; } void mydata_release(mydata_t* data) { free(data); } void mydata_operate(mydata *data) { int c = data->fcb(data->a, data->b); printf("mydata inner operate %d\n", c); } int main() { mydata_t *data = mydata_create(add); data->a = 10; data->b = 3; mydata_operate(data); data->fcb = sub ; /* 改变函数管理器 */ mydata_operate(data); mydata_release(data); return 0; }
如下运行截图
在写自定义的二叉树,如平衡二叉树、红黑树时,可以自定义存储数据类型,给个比较的函数管理器(cmp_fcb),释放内存的管理器(release_fcb)等,主要是灵活,方便。类似的使用很多。。。