回调函数
2015-12-04 09:16
232 查看
什么是回调函数
简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
为什么要使用回调函数
因为使用回调函数可以把调用者和被调用者分开,调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。
如何使用回调函数
使用回调函数,我们需要做三件事:
声明
定义
设置触发条件:在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于系统调用。
声明和定义时应注意,回调函数由系统调用,所以可以认为它属于windows系统,不要把它当作你的某个类的成员函数。
回调函数是一个程序员不能显示调用的函数,通过将回调函数的地址传给调用者从而实现调用。回调函数是十分必要的,在我们想通过一个统一接口实现不同的内容,这时回调函数非常合适。
函数指针的声明
对回调函数有了一个初步的了解,下面我们来说一下函数指针。因为要实现回调,必须首先定义函数指针。
void (*) ()
左边圆括弧中的星号是函数指针声明的关键。另外两个元素是函数的返回类型(void)和右边圆括弧中的入口参数
为函数指针声明类型定义:
Typedef void(* pfv)()
pfv 是一个函数指针,它指向的函数没有输入参数,返回类型为voie。使用这个类型定义名称可以隐藏负责的函数指针语法。
void (*p)();
void func()
{
……
}
p = func;
p的赋值可以不同,但一定要是函数的指针,并且参数和返回类型相同。
例如:下面一个例子
[cpp]
view plaincopy
#include <iostream>
using namespace std;
typedef void (*PF)(); //函数指针的声明
void func() //回调函数定义
{
cout << "func" << endl;
}
void caller( PF pf) //即触发条件
{
pf();
}
int main()
{
PF p = func;
caller(p); //最终通过函数指针PF调用了回调函数func()
system("pause");
return 0;
}
简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
为什么要使用回调函数
因为使用回调函数可以把调用者和被调用者分开,调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。
如何使用回调函数
使用回调函数,我们需要做三件事:
声明
定义
设置触发条件:在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于系统调用。
声明和定义时应注意,回调函数由系统调用,所以可以认为它属于windows系统,不要把它当作你的某个类的成员函数。
回调函数是一个程序员不能显示调用的函数,通过将回调函数的地址传给调用者从而实现调用。回调函数是十分必要的,在我们想通过一个统一接口实现不同的内容,这时回调函数非常合适。
函数指针的声明
对回调函数有了一个初步的了解,下面我们来说一下函数指针。因为要实现回调,必须首先定义函数指针。
void (*) ()
左边圆括弧中的星号是函数指针声明的关键。另外两个元素是函数的返回类型(void)和右边圆括弧中的入口参数
为函数指针声明类型定义:
Typedef void(* pfv)()
pfv 是一个函数指针,它指向的函数没有输入参数,返回类型为voie。使用这个类型定义名称可以隐藏负责的函数指针语法。
void (*p)();
void func()
{
……
}
p = func;
p的赋值可以不同,但一定要是函数的指针,并且参数和返回类型相同。
例如:下面一个例子
[cpp]
view plaincopy
#include <iostream>
using namespace std;
typedef void (*PF)(); //函数指针的声明
void func() //回调函数定义
{
cout << "func" << endl;
}
void caller( PF pf) //即触发条件
{
pf();
}
int main()
{
PF p = func;
caller(p); //最终通过函数指针PF调用了回调函数func()
system("pause");
return 0;
}
相关文章推荐
- Roman To Integer
- C语言程序设计教程(第三版)课后习题10.4
- 轻松学习JavaScript五:JavaScript的变量和数据类型
- Java基础之Arrays的用法总结
- 第十四周项目3-是否二叉排序树
- 半正定矩阵
- Swift基本语法
- 09-动作流程-1-MoveBy分析
- for循环三角形代码
- linux开机自启动 ntsysv
- 《TCP/IP详解 卷1:协议》 读书笔记 第九章 IP选路
- 使用TypeScript拓展你自己的VS Code!
- 第十三周项目1 prim算法
- HBase体系结构02(Client)
- uoj128/bzoj4196/NOI2015.软件包管理器(树链剖分)
- DB2新建实例参数
- yii2 表单错误提示
- 轻松学习JavaScript四:JS点击灯泡来点亮或熄灭这盏灯的网页特效映射出JS在HTML中作用
- 第十四周项目2-二叉树排序树中查找的路径
- 第九周项目四:广义表算法库及应用(1)