函数回调以及函数指针

code 其实只是行为的一种描述,code可以编码成为data,将data解释运行的时候,也会变成code。code和data可以不用区分,统一称为信息。
##统一code、data的共性(数据和代码的统一)


有些语言不单可以传递函数,函数里面又用到一些外部信息(包括code, data)。那些语言可以将函数跟函数所用到的信息一起传递存储。
这种将函数和它所用的信息作为一个整体,就为闭包。
### 闭包在swift语言中经常会用到。


### 将代码和数据打通,统一起来,是一个槛。比如一些修改自身的程序啊,数据驱动啊,先设计数据再写程序等等。


回调函数也就是是A让B做事,B做着做着,信息不够,不知道怎么做了,就再让外面处理。


C语言中不可以传进第一值的函数,就设计成传递第二值的函数指针,这个函数指针就是A传向B的信息,用来表示一个行为。这里本来A调用B的,结果B又调用了A告诉它的信息,也就叫callback。
### 回调函数和闭包之间存在着大与小范围的关系。


在分层设计中,高层次的模块会叫低层次的模块做一些事情,通常是通过函数调用。 
从设计上来说,低层次的模块不应该直接调用高层次模块的函数。
### 明晰回调与调用之间的关系,回调是在调用的基础上扩展的。


操作系统本是为应用程序服务,由应用程序来调用。而应用程序一旦启动,却要反过来等待操作系统的调用。这分明也是一种回调,或者说是一种广义回调
### 广义回调例子:程序应用启动与操作系统之间的关系(存在回调)


回调函数主要用于一些比较费时的操作,或响应不知道何时将会发生的事件,回调函数提供了一种异步的机制, 相对于同步执行,提高了效率.


回调函数:   
回调函数是这样一种机制:调用者在初始化一个对象(这里的对象是泛指,包括OOP中的对象、全局函数等)时, 将一些参数传递给对象,同时将一个调用者可以访问的函数地址传递给该对象。
"这个函数就是调用者和被调用者之间的一种通知约定"
,当约定的事件发生时,被调用者(一般会包含一个工作线程)就会按照回调函数地址调用该函数。 这种方式,调用者在一个线程,被调用者在另一个线程。
总结:(回调函数)被调用者之所以是以参数的形式放在调用者的函数中,因为这样就可以回调调用者的资源,是西安回调,不过他们在不同的线程中。


window上的回调函数:
回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。


在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中弹出。


### 需要注意的是回调函数必须是全局函数或者静态成员函数


声明和定义时应注意,回调函数由系统调用,所以可以认为它属于windows系统,不要把它当作你的某个类的成员函数。


回调函数是一个程序员不能显示调用的函数,通过将回调函数的地址传给调用者从而实现调用。回调函数是十分必要的,在我们想通过一个统一接口实现不同的内容,这时回调函数非常合适




总结:
1、先理解函数指针的概念,函数指针和变量指针的关系,函数指针是一个存放函数栈中的地址。
2、函数调研,函数调用就是一个函数准备者,被被人调用
3、函数回调,区分调用者和被调用者,调用者调用被调用这的同时,被调用者也会利用调用者的资源(或调用调用者),一般是以函数指针参数的形式传递。
4、回调函数(被调用者的函数),注意要是全局函数或者静态函数。
5、函数回调,是一种设计模式,与语言无关
6、函数回调的例子:有计算机的中断、计算机应用的启动等等。


参考链接:
回调函数:
http://blog.csdn.net/jackystudio/article/details/11720325
http://www.cppblog.com/SpringSnow/archive/2008/12/07/68770.aspx


c语言与函数指针
http://blog.jobbole.com/44639/























  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值