C语言 回调函数 callback

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门


一.回调函数原理

你到商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。

在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做 触发回调事件,店员给你打电话叫做 调用回调函数,你到店里去取货叫做响应回调事件


二.回调函数简介

在讲解 C 语言回调函数之前,我们需要对前面的函数指针指针函数做简单的解释:


1.函数指针

函数指针,其本质是一个指针,指向的是一个函数的地址。

基本声明形式:返回数据类型 + (*函数名) + (变量类型1,…);

//返回int类型的函数指针
int (*fun) (int);

2.指针函数

指针函数,即返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。

基本声明形式:返回数据类型 + * + 函数名 + (变量类型1,…);

//返回int类型指针的指针函数
int* fun(int x,int y);

3.回调函数解释

回调函数其实就是一个通过函数指针调用的函数!

假如你把 A 函数的指针当作参数传给 B 函数,然后在 B 函数中通过 A 函数传进来的这个指针调用 A 函数,那么这就是回调机制。

A 函数就是回调函数,而通常情况下,A 函数是系统在符合你设定条件的情况下会自动执行。


三.回调函数实战

举个例子:你现在需要写一个视频播放器项目,当视频播放结束后通知用户当前视频已经播放完成!

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 回调函数 callback
//@Time:2021/06/24 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string>

typedef  int (*callBackFunc)(char* name);

int playBegin(char* name)
{
    printf("视频开始解码,即将出现画面....\n");
    return 1;
}
int playEnd(char* name)
{
    printf("视频播放结束....\n");
    return 1;
}
int play(callBackFunc fn, char* name)
{
    return fn(name);
}
int main()
{
   char pName[1024] = "色即是空";
   //视频播放开始....
   play(playBegin,pName);//playBegin函数指针作为参数传递
   //视频播放中....
   //视频播放结束....
   play(playEnd,pName);//playEnd函数指针作为参数传递
   return 0;
}
/*
输出:
视频开始解码,即将出现画面....
视频播放结束....
*/

四.回调函数使用总结

1.使用typedef声明一个函数指针;

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 回调函数 callback
//@Time:2021/06/24 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

//没有参数的回调函数
typedef  int (*callBackFunc)();

//含有参数的回调函数,回调函数参数可以是一个或者多个
typedef  int (*callBackFunc)(int x);
typedef  int (*callBackFunc)(int x, int y, int z);

2.使用 C 语言实现一个和函数指针返回值类型/函数参数都一样的函数(函数名字任意取);

3.将实现的 C 语言函数作为参数传递(实际上就是传递的函数指针);

4.满足特定的情况下,调用回调函数;


五.猜你喜欢

  1. C语言逻辑运算符
  2. C语言三目运算符
  3. C语言逗号表达式
  4. C语言 sizeof 和 strlen 函数区别
  5. C语言 strcpy 和 strcpy_s 函数区别
  6. C语言 memcpy 和 memcpy_s 区别
  7. C语言 数组定义和使用
  8. C语言 数组遍历
  9. C语言 数组下标越界
  10. C语言 数组内存溢出
  11. C语言 数组下标越界和内存溢出区别
  12. C语言 二维数组定义和使用
  13. C语言 二维数组行数和列数计算
  14. C语言 指针声明和定义
  15. C语言 指针 p++ / p–
  16. C语言 p++/(p)++/(p++)/p++
  17. C语言 使用指针遍历数组
  18. C语言 指针和数组区别
  19. C语言 数组指针
  20. C语言 指针数组
  21. C语言 指针数组和数组指针区别
  22. C语言 空指针 NULL
  23. C语言 void 指针
  24. C语言 野指针
  25. C语言 函数值传递和址传递
  26. C语言 函数缺省参数
  27. C语言 函数不定长参数
  28. C语言 函数指针
  29. C语言 指针函数
  30. C语言 回调函数 callback

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞3 分享
评论 共2条

请登录后发表评论