浅谈C/C++中回调函数
来源:互联网 发布:java nio相关书籍 编辑:程序博客网 时间:2024/05/23 19:48
了解回调函数之前,首先先知道函数指针的概念:
指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函数入口地址的指针称为函数指针。
(1)先来看一个小程序:
int main(int argc,char* argv[]){ printf("Hello World!\n"); return 0;}用函数调用情况:
void Invoke(char* s){ printf(s);}int main(int argc,char* argv[]){ Invoke("Hello World!\n"); return 0;}
用函数指针来实现:void Invoke(char* s){ printf(s);}int main(){ void (*fp)(char* s); //声明一个函数指针(fp) fp=Invoke; //将Invoke函数的入口地址赋值给fp fp("Hello World!\n"); //函数指针fp实现函数调用 return 0;} 通过上面的例子可以知道,先用指针名(*fp)代替了函数名Invoke,这样这声明了一个函数指针,然后进行赋值fp=Invoke就可以进行函数指针的调用了。声明函数指针时,只要函数返回值类型、参数个数、参数类型等保持一致,就可以声明一个函数指针了。注意,函数指针必须用括号括起来 void (*fp)(char* s)。为了方便可以使用typedef来给函数指针取别名:
typedef void (*FP)(char* s);void Invoke(char* s){ printf(s);}int main(int argc,char* argv[]){ FP fp; //通常是用宏FP来声明一个函数指针fp fp=Invoke; fp("Hello World!\n"); return 0;}
通过上面的例子可以知道回调函数的作用。回调函数:
回调函数就是使用者自己定义一个函数,使用者自己实现这个函数的程序内容,然后把这个函数作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数。
函数指针数组:一个数组,里面放的指针,指针指向函数。typedef void (*FP)(char* s);void f1(char* s){cout<<s;}void f2(char* s){cout<<s;}void f3(char* s){cout<<s;}int main(int argc,char* argv[]){ void* a[]={f1,f2,f3}; //定义了指针数组,这里a是一个普通指针 a[0]("Hello World!\n"); //编译错误,指针数组不能用下标的方式来调用函数 FP f[]={f1,f2,f3}; //定义一个函数指针的数组,这里的f是一个函数指针 f[0]("Hello World!\n"); //正确,函数指针的数组进行下标操作可以进行函数的间接调用 return 0;}再来看一个例子:
改成函数回调:
//定义回调函数void PrintfText() { printf("Hello World!\n");}//定义实现回调函数的"调用函数"void CallPrintfText(void (*callfuct)()){ callfuct();}//在main函数中实现函数回调int main(int argc,char* argv[]){ CallPrintfText(PrintfText); return 0;}改成带参的回调://定义带参回调函数void PrintfText(char* s) { printf(s);}//定义实现带参回调函数的"调用函数"void CallPrintfText(void (*callfuct)(char*),char* s){ callfuct(s);}//在main函数中实现带参的函数回调int main(int argc,char* argv[]){ CallPrintfText(PrintfText,"Hello World!\n"); return 0;}在C++中,类的内部函数不能作为回调函数,可以将其设成静态函数,然后作为回调函数。
阅读全文
0 0
- 浅谈C/C++中回调函数
- 浅谈C语言中的回调函数
- C 回调函数
- 【c++】回调函数
- C 回调函数
- C回调函数
- [C] 回调函数
- C 回调函数
- C回调函数
- [C++]回调函数
- 浅谈C/C++回调函数(Callback)& 函数指针
- C/C++中回调函数初探
- C/C++中回调函数初探
- C/C++中回调函数初探
- C/C++中回调函数初探
- C/C++中回调函数初探
- C/C++中回调函数初探
- C/C++中回调函数初探
- HttpClient的使用以及jdk自带URLConnection的使用
- react-native for android https证书认证
- 伪分布式集群环境hadoop、hbase、zookeeper搭建
- ubuntu 16.04 使用 pandoc + xelatex 将 markdown 转换为 pdf
- python字符串前缀 u和r的区别
- 浅谈C/C++中回调函数
- 关于AJAX请求JSON数据(解决responseText空的问题)
- 系统之间通讯方式(BIO和NIO的区别)(一)
- 采用动态代理的方式对一个类进行增强
- java8中concurrentHashmap的改进
- 微信游戏5
- My configuration of Sublime Text3
- C语言实现“八皇后问题”
- 20171009_工作记录