回调函数之什么是回调函数,为什么要回调?

回调函数之什么是回调函数,为什么要回调?

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

#include // 包含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

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,是不是就更明白了呢?

相关推荐

[论坛通告]任天堂Switch Pro手柄续航时间长达40小时
best365官网体育投注

[论坛通告]任天堂Switch Pro手柄续航时间长达40小时

📅 06-29 👁️ 9547
“史上最弱世界杯东道主”并非一无是处 卡塔尔足球造星体系已高效运转
SEO外链怎么发?2025年高效策略与避坑指南
best365官网体育投注

SEO外链怎么发?2025年高效策略与避坑指南

📅 10-14 👁️ 4878