qsort函数的用法及参数的讲解

第一种用法展示:(整形数组的qsort)

一,qsort函数的定义:

qsort 函数的定义:void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));

使用其需要包含头文件:#include<stdlib.h>

//  size_t是一种无符号整数类型。

qsort函数有四个参数:

第一个:void* base

指向要排序的数组的第一个对象的指针。

第二个:size_t num

由base指针指向的数组中的需要排序的元素的数量。

第三个:size_t size

数组中每个元素的字节大小。

第四个:int (*compar)(const void*,const void*)

指向一个比较两个元素的函数的指针(函数指针),这个函数将被qsort反复调用以比较两个元素,这个函数指针指向的函数,能够比较base指向数组中的两个元素。

注意:第四个参数是函数指针,它所指向的函数是由我们自己编写的,其作用在于实现排序中的比较功能,所以我们创建的这个函数的参数以及返回类型的格式要按照第四个参数来定义:

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

二,返回类型:

  • < 0:前者指向的元素在小于后者指向的元素。
  • 0:两个元素大小相等。
  • > 0:前者指向的元素大于后者指向的元素。

三,重点解释:

1:第四个参数,因为我们自己创建的比较整形的函数是 cmp_int,所以我们的传参传的就是cmp_int,函数名就是函数地址,所以和qsort函数的定义中的第四个参数为函数指针刚刚匹配,正好用函数指针来接收函数的地址(函数名)。

2:对于void*的解释,身为函数本身,他并不知道使用者会给它传什么类型的指针变量,有可能是对整形数组进行排序,有可能是结构体数组,字符数组等等,所以我们采用的是用void*来接收,void*特点:

void* 的指针 - 无具体类型的指针。

void* 类型的指针可以接收任意类型的地址。

void*是不能直接解引用操作的也不能直接进行指针运算的。

3:对于const的解释:const可以防止指针所指向的内容被修改,我们只是作比较,并不想要数据被修改。

4综上所述,所以我们要将void*强转为我们需要的指针类型,然后再解引用,才能得到我们所需要的数据。

结果展示:

第二种用法展示:(结构体数组中的年龄元素的qsort)

和整形比较的区别在于:我们自己创建比较大小函数的时候,强转类型为struct stu*,然后->或者解引用之后再用 "." 操作符。

结果展示:

第三种用法展示:(结构体数组中的名字元素的qsort)

和结构体数组中的年龄比较的区别在于:我们需要用到strcmp函数,

strcmp的返回值:(比较的字符所对应的ascll码值)

  • 如果两个名字的第一个字谜是相同的,函数返回 0
  • 如果第一个名字的第一个字符小于第二个名字的第一个字符,则函数返回一个负数。
  • 如果第一个名字的第一个字符大于第二个名字的第一个字符,函数返回一个正数。
  • 总的来说:strcmp函数提供了一个简单而直接的方式来比较两个C风格的字符串是否相等,或者确定它们的ascll码值。

这正好与qsort函数的返回值一致,并且可以达到我们的名字元素的排序要求。

结果展示:

ascll码值中:l<w<z。 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apps分类:深度解析多维度标准与应用领域

引言 随着智能手机的广泛普及&#xff0c;移动应用已经成为我们日常生活中不可或缺的一部分。这个数字化时代&#xff0c;我们依赖于各种各样的应用&#xff0c;从社交媒体到生产力工具&#xff0c;再到娱乐和健康应用&#xff0c;移动应用为我们提供了方便、娱乐和信息获取的…

波奇学Linux: 信号捕捉

sigaction:修改信号对应的handler方法 act输入型参数&#xff0c;oldact输出型参数 void (*sa_handler) (int) //修改的自定义函数 sigset_t sa_mask // void handler(int signo) {cout<<"catch a signal, signal number: "<<signo<<endl; } int …

函数柯里化:JavaScript中的高级技巧

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

CraxsRat7.4 安卓手机远程管理软件

CRAXSRAT 7.4 最新视频 https://v.douyin.com/iFjrw2aD/ 官方网站下载 http://craxsrat.cn/ 不要问我是谁&#xff0c;我是活雷锋。 http://craxsrat.cn/ CraxsRat CraxsRat7 CraxsRat7.1 CraxsRat7.2 CraxsRat7.3 CraxsRat7.4

【AI视野·今日NLP 自然语言处理论文速览 第八十四期】Thu, 7 Mar 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 7 Mar 2024 Totally 52 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers The Heuristic Core: Understanding Subnetwork Generalization in Pretrained Language Models Authors Adith…

Synthetic Temporal Anomaly Guided End-to-End Video Anomaly Detection 论文阅读

Synthetic Temporal Anomaly Guided End-to-End Video Anomaly Detection 论文阅读 Abstract1. Introduction2. Related Work3. Methodology3.1. Architecture3.1.1 Autoencoder3.1.2 Temporal Pseudo Anomaly Synthesizer 3.2. Training3.3. Anomaly Score 4. Experiments4.1.…

深度学习:如何面对隐私和安全方面的挑战

深度学习技术的广泛应用推动了人工智能的快速发展&#xff0c;但同时也引发了关于隐私和安全的深层次担忧。如何在保护用户隐私的同时实现高效的模型训练和推理&#xff0c;是深度学习领域亟待解决的问题。差分隐私、联邦学习等技术的出现&#xff0c;为这一挑战提供了可能的解…

Toyota Programming Contest 2024#3(AtCoder Beginner Contest 344)(A~C)

A - Spoiler 竖线里面的不要输出&#xff0c;竖线只有一对&#xff0c;且出现一次。 #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(int (i)(j);(i)>(k);--(i)) #define debug(a) cou…

【分库分表】基于mysql+shardingSphere的分库分表技术

目录 1.什么是分库分表 2.分片方法 3.测试数据 4.shardingSphere 4.1.介绍 4.2.sharding jdbc 4.3.sharding proxy 4.4.两者之间的对比 5.留个尾巴 1.什么是分库分表 分库分表是一种场景解决方案&#xff0c;它的出现是为了解决一些场景问题的&#xff0c;哪些场景喃…

Linux系统——web服务拓展练习

目录 一、实验环境搭建 1. Centos 7-5——Client 2. Centos 7-1——网关服务器 3. Centos 7-2——Web1 4. Centos 7-3——Web2 5. Centos 7-4——Nginx 二、在Nginx服务器上搭建LNMP服务&#xff0c;并且能够对外提供Discuz论坛服务&#xff1b;在Web1、Web2服务器上搭建…

强化CentOS安全防线:如何有效应对常见安全威胁

前言 探索CentOS系统安全的世界&#xff0c;了解如何从容应对常见安全威胁。本文深入解析了强化CentOS安全防线的实用技巧和关键策略&#xff0c;帮助你建立稳固的网络防护体系。无论你是初入安全领域的新手还是经验丰富的专业人士&#xff0c;相信都能从中获取宝贵经验。如果…

电脑资料管理软件(5个高效批量管理电脑资料的方法)

企业电脑资料管理是企业一大难题&#xff0c;为什么这样说&#xff1f; 首先&#xff0c;企业电脑资料的数量庞大且种类繁多。 其次&#xff0c;电脑资料的安全性和保密性要求高。 再者&#xff0c;电脑资料的管理涉及到多个部门和员工的协作。 ...... 针对此类情况很多企业…