首页 > 编程知识 正文

回调函数的概念,回调函数是怎么实现的

时间:2023-05-05 07:00:15 阅读:241304 作者:4230

1. 什么是回调函数?

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

A "callback" is any function that is called by another function which takes the first function as a parameter。 也就是说,函数 F1 (如F1是主函数)调用函数 F2 的时候,函数 F1 通过参数给 函数 F2 传递了另外一个函数 F3 的指针,在函数 F2 执行的过程中,函数F2 调用了函数 F3,这个动作就叫做回调(Callback),而先被当做指针传入、后面又被回调的函数 F3 就是回调函数。

2. 为什么要使用回调函数? #include<stdio.h>#include<softwareLib.h> // 包含Library Function所在读得Software library库的头文件int Callback() // Callback Function{ // TODO return 0;}int main() // Main program{ // TODO Library(Callback); // TODO return 0;}

两者之间的一个关键的不同:在回调中,主程序把回调函数像参数一样传入库函数。这样一来,只要我们改变传进库函数的参数,就可以实现不同的功能,这样有没有觉得很灵活?并且丝毫不需要修改库函数的实现,这就是解耦。

想一想,如果库函数对我们不可见,我们修改不了库函数的实现,也就是说不能通过修改库函数让库函数调用普通函数那样实现,那我们就只能通过传入不同的回调函数了,这也就是在日常工作中常见的情况。现在再把main()、Library()和Callback()函数套回前面 F1、F2和F3函数里面,是不是就更明白了?

#include<stdio.h>int Callback_1() // Callback Function 1{ printf("Hello, this is Callback_1 "); return 0;}int Callback_2() // Callback Function 2{ printf("Hello, this is Callback_2 "); return 0;}int Callback_3() // Callback Function 3{ printf("Hello, this is Callback_3 "); return 0;}int Handle(int (*Callback)()){ printf("Entering Handle Function. "); Callback(); printf("Leaving Handle Function. ");}int main(){ printf("Entering Main Function. "); Handle(Callback_1); Handle(Callback_2); Handle(Callback_3); printf("Leaving Main Function. "); return 0;}

可以看到,Handle()函数里面的参数是一个指针,在main()函数里调用Handle()函数的时候,给它传入了函数Callback_1()/Callback_2()/Callback_3()的函数名,这时候的函数名就是对应函数的指针,也就是说,回调函数其实就是函数指针的一种用法。现在再读一遍这句话:A "callback" is any function that is called by another function which takes the first function as a parameter,是不是就更明白了呢?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。