回调函数和qsort,strcmp函数

news2024/12/23 4:32:10

有任何不懂的问题可以评论区留言,能力范围内都会一一回答

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

回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

我们拿qsort函数举个例子

qsort函数的类型是

void qsort (void* base, size_t num, size_t size,
            int (*compar)(const void*,const void*));

void* base

指向要排序的数组的第一个对象的指针,将其转换为 .void*

size_t num

所指向的数组中的元素数。
是无符号整数类型。

size_t size 

数组中每个元素的大小(以字节为单位)。
是无符号整数类型。

int (*compar)(const void*,const void*)

指向比较两个元素的函数的指针。
重复调用此函数以比较两个元素。它应遵循以下原型:

也就是我们要自己写一个函去作为比较标准

当p1指向的元素比p2大时返回一个大于0的值

当p1指向的元素比p2小时返回一个小于0的值

当p1指向的元素比p2相等时返回一个等于0的值

qsort默认排列的是升序

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int comparation (const void*a, const void*b);
void print(void* c,int sz);
int main(void) {
	int arr[] = { 1,23,42,32,13312,2323,323,123 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), comparation);
	print(arr,sz);
	return 0;
}
int comparation(const void*a, const void*b) {
	return (*(int*)a-*(int*)b);
}
void print(void* c,int sz) {
	for (int i = 0; i < sz; i++)
{ 
	printf("%d\n", *((int *)c + i));
}
}

如上图我们在使用qsort函数的时候我们需要写一个函数作为比较标准

这个标准我们可以自己写,比如把上面的return (*(int*)a-*(int*)b);改成return (*(int*)b-*(int*)a);

我们就可以把qsort变成一个排列降序的函数

但是这里需要注意qsort函数和我们自己编写的函数的类型是确定的,

qosrt函数类型必须是

void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));

我们自己写的比较原则的函数类型必须是int (*compar)(const void*,const void*)

但是这个地方的void*是为了方便我们接收不同类型的数据,但是void*的数据无法直接使用必须强制转换成其它类型才能使用。

那么思考一下,字符串如何比较呢?字符串可不能像整数类型一样直接比较(> < <= >= = !=都无效),因此这个地方我们必须调用一个用来比较字符串的函数strcmp

strcmp比较的不是字符串的长度而是对应字符的大小

strcmp函数的头文件是#include <string.h>

函数定义 :int strcmp(const char *str1, const char *str2);
这里的 const char* 表示两个参数 str1 和 str2 都是指向字符的指针,并且这些字符都以空字符'\0'结尾。(\0的ASCII码值是0)

函数功能 :
strcmp函数会从两个字符串的首地址开始,逐个比较它们对应位置的字符的ASCII码值,直到遇到不同的字符或者其中一个字符串结束。如果 str1 小于 str2 ,则函数返回一个负值;如果两个字符串相同,函数返回0;如果 str1 大于 str2 ,则函数返回一个正值。

回调函数本质上是在一个函数中调用宁外一个函数,如上面那段代码中,我们在qsort函数中调用了comparation这个函数,comparation就是回调函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LLM大模型】GraphRAG入门学习流程

GraphRAG GraphRAG 是一种基于图的检索增强方法&#xff0c;由微软开发并开源。它通过结合LLM和图机器学习的技术&#xff0c;从非结构化的文本中提取结构化的数据&#xff0c;构建知识图谱&#xff0c;以支持问答、摘要等多种应用场景。GraphRAG的特色在于利用图机器学习算法…

7、springboot3 vue3开发平台-后端-获取用户菜单,构建菜单树列表

1. 获取用户信息并 从用户session 中获取用户信息 Operation(summary "查询当前用户菜单")GetMapping("/getSelfMenu")public Result<List<RouterVO>> getSelfMenu() {UserInfo userLoginInfo (UserInfo) StpUtil.getSession().get("u…

【Docker系列】Docker 中-d 和-it 的区别

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python开发: 飞机大战 小游戏

玩法 你可以控制飞机左右移动,躲避敌机子弹,同时发射自己的炮弹,将敌人击落! 部署方案: 1、代码如下图; 2、将代码保存到一个python中,比如planeFight.py; 3、在你的电脑中安装python环境,然后使用命令:“py planeFight.py” 运行这个文件即可; 代码 import p…

大模型深度神经网络(Deep Neural Network, DNN)

大模型深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是一种复杂的机器学习模型&#xff0c;其特点在于包含多个隐藏层&#xff0c;从而赋予模型强大的非线性表达能力和对复杂数据模式的学习能力。以下是对大模型DNN的详细介绍&#xff1a; 一、基本概念 深度…

机器学习之贝叶斯方法

机器学习之贝叶斯方法 1. 贝叶斯定理基础1.1 贝叶斯定理公式1.2 先验概率 (Prior Probability)1.3 后验概率 (Posterior Probability)1.4 似然 (Likelihood)1.5 证据 (Evidence)1.6 贝叶斯定理的应用实例 2. 贝叶斯方法的基本概念2.1 条件概率 (Conditional Probability)2.2 全…

为什么康耐视visionpro的C#二次开发调用的recorddisplay控件偶尔会显示白色的,偶尔又正常了?

recorddisplay控件正常显示 异常显示 原因分析&#xff1a; 没有完全加载recorddisplay控件&#xff0c;有可能是有bug没有完全加载&#xff0c;打断点调试控件是否完全加载。

8、springboot3 vue3开发平台-后端-使用aop 添加系统访问日志

1. 添加依赖&#xff0c; 创建数据库 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!-- IP地址解析 --><dependency><groupId>org.lionsou…

小程序~~3(自定义组件)

目录 1.自定义组件 创建和注册组件 数据和方法 属性properties 组件wxml的slot-插槽&#xff08;难&#xff09; 组件样式以及注意事项&#xff08;难&#xff09; 组件样式隔离&#xff08;难&#xff09; 修改checkbox样式&#xff08;难&#xff09; 数据监听函数o…

Taming Lookup Tables for Efficient Image Retouching

Abstract 高清屏幕在终端用户相机、智能手机和电视等边缘设备中的广泛使用&#xff0c;刺激了对图像增强的巨大需求。现有的增强模型通常针对高性能进行优化&#xff0c;但不能减少硬件推断时间和功耗&#xff0c;尤其是在计算和存储资源受限的边缘设备上。为此&#xff0c;我…

等保2.0与安全编程:携手共筑网络安全防线

一、基本概念 等保2.0&#xff08;网络安全等级保护2.0&#xff09;&#xff1a;作为我国网络安全领域的基本国策和制度&#xff0c;等保2.0是对原有信息安全等级保护&#xff08;等保1.0&#xff09;的全面升级。它于2019年正式实施&#xff0c;旨在应对云计算、大数据、物联网…

基于SSM的停车场管理系统 毕业设计-附源码42934

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3研究方案 1.4论文章节安排 2相关技术介绍 2.1 B/S结构 2.2 SSM框架 2.3 Java语言 2.4 MySQL数据库 3系统分析 3.1 可行性分析 3.2 系统功能性分析 3.3.非功能性分析 3.4 系统用例分析 3.5系统流程分析 3.5.1…

JAVA基础 - 反射

目录 一. 简介 二. java.lang.Class类 三. java.lang.reflect包 四. 创建对象 五. 调用方法 六. 调用成员变量 一. 简介 反射是 Java 语言中的一种强大机制&#xff0c;允许程序在运行时动态地获取类的信息、访问类的成员&#xff08;包括字段、方法和构造函数&#xff…

fal.ai发布超分辨率模型——AuraSR V2

今天&#xff0c;我们发布了单步 GAN 升频器的第二个版本&#xff1a; AuraSR。 我们在上个月发布了 AuraSR v1&#xff0c;社区的反响让我们深受鼓舞&#xff0c;因此我们立即开始了新版本的训练。 AuraSR 基于 Adobe Gigagan 论文&#xff0c;以 lucidrain 的实现为起点。Gi…

Off-by-One Error: 编码中的常见陷阱 ⚠️

Off-by-One Error: 编码中的常见陷阱 ⚠️ Off-by-One Error: 编码中的常见陷阱 ⚠️摘要引言正文内容1. 什么是 Off-by-One 错误&#xff1f;Off-by-One 错误的示例 2. 如何识别 Off-by-One 错误&#xff1f;2.1 使用调试器2.2 单元测试 3. 如何预防 Off-by-One 错误&#xff…

Python酷库之旅-第三方库Pandas(059)

目录 一、用法精讲 226、pandas.Series.pad方法 226-1、语法 226-2、参数 226-3、功能 226-4、返回值 226-5、说明 226-6、用法 226-6-1、数据准备 226-6-2、代码示例 226-6-3、结果输出 227、pandas.Series.replace方法 227-1、语法 227-2、参数 227-3、功能 …

【Python机器学习】Logistic回归——从疝气病症预测病马的死亡率

用Logistic回归来预测患有疝病的马的存活问题。这里的数据包括368个样本和28个特征。疝病是描述马肠胃痛的术语&#xff0c;这种病并不一定源自马的肠胃问题。 该数据集中包含了医院检测马疝病的一些指标&#xff0c;有些指标比较主观&#xff0c;有的指标难以测量&#xff0c…

docker部署elasticsearch和Kibana

部署elasticsearch 通过下面的Docker命令即可安装单机版本的elasticsearch&#xff1a; docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/u…

【STC32G12K128开发板】第3-9讲:手势识别(基于PAJ7620U2)

第3-9讲&#xff1a;手势识别&#xff08;基于PAJ7620U2&#xff09; 学习目的了解IK-PAJ7620U2手势识别传感器模块的功能。掌握IK-PAJ7620U2的I2C协议、操作流程&#xff0c;并编程实现配置IK-PAJ7620U2工作于接近检测和手势识别模式以及读取检测结果。 PAJ7620手势识别模块 产…

灰狼优化算法(GWO)的详细解读

一、引言 在优化问题中&#xff0c;我们常常需要寻找一个最优解&#xff0c;使得某个目标函数达到最小或最大值。为了高效地解决这类问题&#xff0c;研究者们从自然界中的生物行为汲取灵感&#xff0c;提出了多种群智能优化算法。灰狼优化算法&#xff08;Grey Wolf Optimize…