当前位置: 首页 > 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;
}

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

相关文章:

C语言——回调函数

1、回调函数 在学习了函数之后&#xff0c;我发现了一个比较难的函数——回调函数 回调函数 (Callback Function) 指的是一种函数&#xff0c;它被作为参数传递给另一个函数&#xff0c;并在满足特定条件或事件发生后被调用执行。 它允许你将一段代码延迟执行&#xff0c;或者…...

2016年ATom-1飞行活动期间以10秒间隔进行的一氧化碳(CO)观测数据

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: Observed and GEOS-5 Simulated CO Concentrations with Tagged Tracers for ATom-1 简介 该数据集包含2016年ATom-1飞行活动期间以10秒间隔进行的一氧化碳&#xff08;CO&#xff09;观测数据&#xff0c;…...

MLM之Emu3:Emu3(仅需下一个Token预测)的简介、安装和使用方法、案例应用之详细攻略

MLM之Emu3&#xff1a;Emu3(仅需下一个Token预测)的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;这篇论文介绍了Emu3&#xff0c;一个基于单一Transformer架构&#xff0c;仅使用下一个token预测进行训练的多模态模型。 >> 背景痛点&#xff1a; 多模态任…...

Spring Boot与Flyway实现自动化数据库版本控制

一、为什么使用Flyway 最简单的一个项目是一个软件连接到一个数据库&#xff0c;但是大多数项目中我们不仅要处理我们开发环境的副本&#xff0c;还需要处理其他很多副本。例如&#xff1a;开发环境、测试环境、生产环境。想到数据库管理&#xff0c;我们立刻就能想到一系列问…...

input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序

往期内容 本专栏往期内容&#xff1a; input子系统的框架和重要数据结构详解-CSDN博客input device和input handler的注册以及匹配过程解析-CSDN博客input device和input handler的注册以及匹配过程解析-CSDN博客编写一个简单的Iinput_dev框架-CSDN博客GPIO按键驱动分析与使用&…...

SQL-lab靶场less1-4

说明&#xff1a;部分内容来源于网络&#xff0c;如有侵权联系删除 前情提要&#xff1a;搭建sql-lab本地靶场的时候发现一些致命的报错&#xff1a; 这个程序只能在php 5.x上运行&#xff0c;在php 7及更高版本上&#xff0c;函数“mysql_query”和一些相关函数被删除&#xf…...

【生成模型之二】diffusion model模型

【算法简历修改、职业规划、校招实习咨询请私信联系】 【Latent-Diffusion 代码】 生成模型分类概述 Diffusion Model&#xff0c;这一深度生成模型&#xff0c;源自物理学中的扩散现象&#xff0c;呈现出令人瞩目的创新性。与传统的生成模型&#xff0c;如VAE、GAN相比&…...

记录 Maven 版本覆盖 Bug 的解决过程

背景 在使用 Maven 进行项目管理时&#xff0c;依赖版本的管理是一个常见且重要的环节。最近&#xff0c;在我的项目中遇到了一个关于依赖版本覆盖的 Bug&#xff0c;这个问题导致了 Apollo 框架的版本不一致&#xff0c;影响了项目的正常运行。以下是我解决这个问题的过程记录…...

【K8S系列】Kubernetes Service 基础知识 详细介绍

在 Kubernetes 中&#xff0c;Service 是一种抽象的资源&#xff0c;用于定义一组 Pod 的访问策略。它为这些 Pod 提供了一个稳定的访问入口&#xff0c;解决了 Pod 可能频繁变化的问题。本文将详细介绍 Kubernetes Service 的类型、功能、使用场景、DNS 和负载均衡等方面。 1.…...

python在物联网领域的数据应用分析与实战!

引言 物联网(IoT)是一个快速发展的领域,涉及到各种设备和传感器的连接与数据交换。随着设备数量的激增,数据的产生速度也在不断加快。 如何有效地分析和利用这些数据,成为了物联网应用成功的关键。Python作为一种强大的编程语言,因其简洁易用的特性和丰富的库支持,成为…...

目标跟踪算法-卡尔曼滤波详解

卡尔曼滤波是一种递归的优化算法&#xff0c;用于估计一个系统的动态状态&#xff0c;常用于跟踪、导航、时间序列分析等领域。它的关键在于使用一系列测量数据&#xff08;通常含噪声&#xff09;来估计系统的真实状态&#xff0c;使得估计值更接近实际情况。卡尔曼滤波器适合…...

SpringBoot后端开发常用工具详细介绍——application多环境配置与切换

文章目录 引言介绍application.yml&#xff08;主配置文件&#xff09;application-dev.yml&#xff08;开发环境配置&#xff09;application-test.yml&#xff08;测试环境配置&#xff09;application-prod.yml&#xff08;生产环境配置&#xff09;激活配置文件参考内容 引…...

php反序列化漏洞典型例题

1.靶场环境 ctfhub-技能树-pklovecloud 引用题目&#xff1a; 2021-第五空间智能安全大赛-Web-pklovecloud 2.过程 2.1源代码 启动靶场环境&#xff0c;访问靶场环境&#xff0c;显示源码&#xff1a;直接贴在下面&#xff1a; <?php include flag.php; class pks…...

浅析Android View绘制过程中的Surface

前言 在《浅析Android中View的测量布局流程》中我们对VSYNC信号到达App进程之后开启的View布局过程进行了分析&#xff0c;经过对整个App界面的View树进行遍历完成了测量和布局&#xff0c;确定了View的大小以及在屏幕中所处的位置。但是&#xff0c;如果想让用户在屏幕上看到…...

基于卷积神经网络的大豆种子缺陷识别系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 大豆种子缺陷识别系统&#xff0c;卷积神经网络&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神…...

HarmonyOS项目开发一多简介

目录 一、布局能力概述 二、自适应布局 三、响应式布局 四、典型布局场景 一、布局能力概述 布局决定页面元素排布及显示&#xff1a;在页面设计及开发中&#xff0c;布局能力至关重要&#xff0c;主要通过组件结构来确定使用何种布局。 自适应布局与响应式布局&#xff1…...

C++基础三

构造函数 构造函数(初始化类成员变量)&#xff1a; 1、属于类的成员函数之一 2、构造函数没有返回类型 3、构造函数的函数名必须与类名相同 4、构造函数不允许手动调用(不能通过类对象调用) 5、构造函数在类对象创建时会被自动调用 6、如果没有显示声…...

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛:台风预测与分析

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛&#xff1a;台风预测与分析 引言 在2024年MathorCup大数据挑战赛中&#xff0c;赛道A聚焦于气象数据分析&#xff0c;特别是台风的生成、路径预测、和降水风速特性等内容。本次比赛的任务主要是建立一个分类评价模型&…...

Linux系统操作篇 one -文件指令及文件知识铺垫

Linux操作系统入门-系统篇 前言 Linux操作系统与Windows和MacOS这些系统不同&#xff0c;Linux是黑屏的操作系统&#xff0c;操作方式使用的是指令和代码行来进行&#xff0c;因此相对于Windows和MacOS这些带有图形化界面的系统&#xff0c;Linux的入门门槛和上手程度要更高&…...

隨筆20241028 ISR 的收缩与扩展及其机制解析

在 Kafka 中&#xff0c;ISR&#xff08;In-Sync Replicas&#xff09; 是一组副本&#xff0c;它们与 Leader 保持同步&#xff0c;确保数据一致性。然而&#xff0c;ISR 的大小会因多种因素而变化&#xff0c;包括收缩和扩展。以下是 ISR 收缩与扩展的详细解释及其背后的机制…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...