当前位置: 首页 > news >正文

C语言——回调函数

1、回调函数

在学习了函数之后,我发现了一个比较难的函数——回调函数

回调函数 (Callback Function) 指的是一种函数,它被作为参数传递给另一个函数,并在满足特定条件或事件发生后被调用执行。 它允许你将一段代码延迟执行,或者在某个事件发生后执行。 这在异步编程、事件处理和许多其他编程场景中非常有用。

2、回调函数的应用场景

1.异步编程:在异步编程中,回调函数可以用来处理异步操作的结果,例如网络请求、数据库查询、文件读写等。
2.事件驱动编程:在事件驱动编程中,回调函数可以用来处理事件,例如鼠标点击、键盘输入、网络连接等。
3.消息传递:在消息传递中,回调函数可以用来处理消息,例如队列、主题、事件总线等。

3、回调函数的优点是:

1.灵活性高:回调函数可以在函数调用中传入任意函数,实现函数之间的关联。
2.可重用性高:回调函数可以在多个场景中重用,减少代码的重复。
3.可读性高:回调函数可以使代码更加可读性高,易于理解和维护。

4、回调函数也存在一些缺点

1.复杂性高:回调函数可能会增加函数的复杂性,难以理解和维护。
2.容易出错:回调函数可能会导致函数之间的依赖关系混乱,容易出错。
3.可读性低:回调函数可能会使代码变得难以读懂,易于出错。

5、回调函数的基础——函数指针

6、示例

#include <stdio.h>// 自定义的回调函数
typedef int (*compare_func)(const void*, const void*);// 使用回调函数的函数
void sort_array(void* arr, int len, compare_func func) {for (int i = 0; i < len - 1; i++) {for (int j = i + 1; j < len; j++) {if (func((void*)&((int*)arr)[i], (void*)&((int*)arr)[j]) > 0) {int temp = ((int*)arr)[i];((int*)arr)[i] = ((int*)arr)[j];((int*)arr)[j] = temp;}}}
}int compare_int(const void* a, const void* b) 
{return *(int*)a - *(int*)b;
}int main() {int arr[] = {4, 2, 7, 1, 3};int len = sizeof(arr) / sizeof(arr[0]);// 使用自定义的回调函数sort_array((void*)arr, len, compare_int);// 输出排序后的数组for (int i = 0; i < len; i++) {printf("%d ", arr[i]);}printf("");return 0;
}

说白了,就是把函数作为参数传入另外一个函数,在需要的时候调用(和函数调用其实很像,主要是用于直接调用无法解决的情况)

http://www.lryc.cn/news/471277.html

相关文章:

  • 2016年ATom-1飞行活动期间以10秒间隔进行的一氧化碳(CO)观测数据
  • MLM之Emu3:Emu3(仅需下一个Token预测)的简介、安装和使用方法、案例应用之详细攻略
  • Spring Boot与Flyway实现自动化数据库版本控制
  • input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序
  • SQL-lab靶场less1-4
  • 【生成模型之二】diffusion model模型
  • 记录 Maven 版本覆盖 Bug 的解决过程
  • 【K8S系列】Kubernetes Service 基础知识 详细介绍
  • python在物联网领域的数据应用分析与实战!
  • 目标跟踪算法-卡尔曼滤波详解
  • SpringBoot后端开发常用工具详细介绍——application多环境配置与切换
  • php反序列化漏洞典型例题
  • 浅析Android View绘制过程中的Surface
  • 基于卷积神经网络的大豆种子缺陷识别系统,resnet50,mobilenet模型【pytorch框架+python源码】
  • HarmonyOS项目开发一多简介
  • C++基础三
  • 利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛:台风预测与分析
  • Linux系统操作篇 one -文件指令及文件知识铺垫
  • 隨筆20241028 ISR 的收缩与扩展及其机制解析
  • linux-字符串相关命令
  • ES6 函数的扩展
  • Mac 查看占用特定端口、终止占用端口的进程
  • C#入坑JAVA MyBatis入门 CURD 批量 联表分页查询
  • RabbitMQ 安装(Windows版本)和使用
  • Apache paimon表管理
  • java 第19天
  • 什么是服务器?服务器与客户端的关系?本地方访问不了网址与服务器访问不了是什么意思?有何区别
  • Spring(1)—Spring 框架:Java 开发者的春天
  • MT1401-MT1410 码题集 (c 语言详解)
  • React基础语法