C语言中的指针之回调函数
来源:互联网 发布:汕头公车实时软件 编辑:程序博客网 时间:2024/05/09 13:29
C语言中的函数也有自己的入口地址。毕竟对于CPU来说,函数只不过是一组有序的内存段。只要按步就班的执行即可。
函数的入口地址也可用指针来操作,这便是回调函数的本质。
说完本质,应该说现象了,毕竟本质一般都是简单的,现象却是复杂的。
1,适用场景介绍分析
首先调用者,就是上层写程序的人,要写一个函数接收下层传过来的数据。(这里面所谓的上层下层是指人人之间的团队合作的上层下层)。
上层的人要接收数据,而下层的人要把数据接收过来(一般是下层的人从驱动层接收数据)传给上层。这是基本思路 。
即:上层---------下层---------驱动。中间传输的是data.
这种传输方式首先让人想到memcpy。如果是这样的话,那就效率太低了。要知道内存的拷贝可是最浪费资源的。
怎么能让上层的人通过下层,直接接收驱动层传过来的数据呢?
这就用到了回调函数。
上层的人写一个接收函数,把其函数的指针传给下层,下层通过其指针操作接收函数。
这样各模块相对独立,效率又很高。
2,实现
假设有一个函数int func(char *buf, int len),做为上层与下层函数交互的函数。所谓的上层与下层,是指两个人共同合作的层。
上层的要用此函数做为接收下层传过来的数据,而下层的人要使用此函数向上层传递。
下层操作:
那么下层的人要定义一个回调函数。
typedef int (*func)(char *buf, int len);
与正常的操作仅仅差了一个*。这是因为我们要用此函数的指针。
之后写一个接口,供上层使用。例如:int setcbk(func datacallback);
这时下层与上层的接口使用完成。
之后就是下层应该怎么调用,
例如:
定义一个static func __g_cbk_func;
__g_cbk_func(buf, len);此行为从驱动层接收数据。
上层操作:
首先应该 把要使用的函数传递给下层:
例如:setcbk(rev_data_func)
再就是在rev_data_func(char *buf, int len)中接收数据。
至此回调函数完成。
唉,说的比较乱。总之一句话,上层把函数的指针传递给下层使用,下层拿到函数指针用来进行所定义的操作。
- C语言中的指针之回调函数
- C语言中的回调函数(函数指针)
- 函数指针中的回调函数(C语言版本)
- C语言函数指针之回调函数
- 探讨C语言中的回调函数
- c语言中的回调函数
- 探讨C语言中的回调函数
- C语言中的回调函数
- 探讨C语言中的回调函数
- 探讨C语言中的回调函数
- C语言中的回调函数
- 探讨C语言中的回调函数
- 探讨C语言中的回调函数
- 探讨C语言中的回调函数
- c语言中的回调函数
- C语言中的回调函数
- 浅谈C语言中的回调函数
- C语言中的回调函数
- 转一篇写外企的,希望对一些人有用
- MR中Partition的使用 源码示例
- o.boj 1445 All Blue
- Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY的 错误问题总结
- 解决vim显示乱码的问题
- C语言中的指针之回调函数
- java定时器--TimerTask 与 Timer
- o.boj 1446 冰淇淋
- IBATIS SQLMAP模板
- [JavaScript]使用jquery获取iframe加载完成事件
- 部署VC2008的程序
- 随时随地,记录一切:有道笔记(轻松同步、管理终端的所有笔记)
- android菜单详解二:选项菜单
- 移动优先的设计常识:应用如何组织?