标签:回调函数与函数指针
函数指针的定义:就是指向函数的指针,它像其他指针一样,也指向某个特定的类型
函数指针模型:返回值类型 ( * 指针变量名) (形参列表);
例:int (*p)(int x);
"返回值类型"说明函数的返回类型,"(指针变量名 )"中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的"形参列表"表示指针变量指向的函数所带的参数列表。函数指针的类型和函数的返回值类型也必须保持一致。
函数指针的使用主要包括函数指针的赋值和通过函数指针调用函数,函数名和数组名一样代表了函数代码的首地址,因此赋值时,可以直接将函数指针指向函数名。
例:int func(int x);//声明一个函数
int (*p)(int x);//声明一个函数指针
p=func;//将func()函数的首地址赋给指针p
与其他指针变量类似,就可以用p来调用该函数,实际上p和func都指向同一个入口地址,不同就是p是一个指针变量,它可以指向任何函数。如果对p进行解引用,它就相当于是所指向的func函数。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过,指向函数的指针没有++和--运算,用时要小心。
回调:是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口。
回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。回调又常常是异步调用的基础。
回调函数作用:客户和服务的交互除了同步方式以外,都需要具备一定的异步通知机制,让服务方(或接口提供方)在某些情况下能够主动通知客户,而回调是实现异步的一个最简捷的途径。
回调两种实现:
1.对于一般的结构化语言,可以通过回调函数来实现回调。回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。
2.在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类成为回调类,回调类的对象成为回调对象。对于象C++或Object Pascal这些兼容了过程特性的对象语言,不仅提供了回调对象、回调方法等特性,也能兼容过程语言的回调函数机制。
Windows平台的消息机制也可以看作是回调的一种应用,我们通过系统提供的接口注册消息处理函数(即回调函数),从而实现接收、处理消息的目的。
回调函数:在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
回调函数的使用机制:
⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
回调函数的作用:因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个特定原型和限制条件的被调用函数。
标签:回调函数与函数指针
原文地址:http://10541559.blog.51cto.com/10531559/1770082