c语言中“qsort函数”和“结构体成员访问变量”

qsort函数:

qsort是c语言中的库函数,这个函数是对数据进行排序(对任意)

冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据

排序算法

冒泡排序

插入

选择

快速

void qsort{

   void * base;   //base指向的排序数组的第一个元素的指针

   size_t num;     //base指向数组中元素的个数

   size_t size;     //base指向数组中一个元素的大小,单位是字节

   int (*cmp)(const void*,const void*);

};

排列浮点型数组字符串结构体:不同的是两个元素之间的比较方式不同

  两个字符串的比较大小不能使用> ,>=, <, <=, !=, ==,应该有strcmp

  strcmp函数不是比较字符串的长度,而是对应字符所占字节的大小。

//先测试qsort来排序整形

void test1(){

    int arr[] = {1 2 4 6 7 8 9 43 }

    int  sz=sizeof(arr) / sizeof(arr[0]);

    qsort (arr , sz , sizeof(arr[0]) , cmp_int);

    print_arr();

}

对函数返回值有要求,比较两个p1,p2的整型

int cmp_int(const void*p1,const void *p2){

return *(int*)p1 - *(int*)p2;      //直接比较两个整数的大小了

}

比较两个结构体:

张三      李四

20          35

185        170    是比较年龄还是身高呢?

qsort给了一个函数指针,来比较结构体。

//用test2来排序结构体数据

Struct Stu{

char name[20];    //名字是字符串

int age;                //字符串比较用strcmp函数

}

//按照名字来比较

p1强制类型转换,才可以用。需要包含头文件#include<string.h>

void  test2(){

    struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};

    int sz=sizeof(arr)/sizeof(arr[0]);

    qsort(arr , sz , sizeof(arr[0]) , com_stu_by_name);

}

int cmp_stu_by_name(const void *p1,const void *p2){

     return  strcmp(((struct stu*)p1->name,((struct stu*)p2)->name);

}

//按照年龄进行访问

void  test3(){

    struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};

    int sz=sizeof(arr)/sizeof(arr[0]);

    qsort(arr , sz , sizeof(arr[0]) , com_stu_by_age);

}

int cmp_stu_by_age(const void *p1,const void *p2){

     return  strcmp(((struct stu*)p1->age,((struct stu*)p2)->age);

}

结构体成员访问变量

struct Stu{

char name[20];

int age;

}

int main(){

struct Stu s={"zhangsan",20};

printf("%s %d\n",s.name,s.age);          

struct Stu *s=&s;                                        //  结构体成员访问操作符:

printf("%s %d\n",(*ps).name,(*ps).age);     // . :结构体变量 成员名

pritnf("%s %d\n",ps->name,ps->age);       //->: 结构体指针->成员名

return 0;

}

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

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

相关文章

JS在线加密解密工具

快捷工具网得JS加密解密工具为您提供JS加密解密,js加解密工具,JS在线加解密,JS代码在线加解密,该工具基于eval方法的加密与解密功能&#xff0c;用户可将js代码加密成eval方法执行形式的代码&#xff0c;也可将eval方法加密过的代码进行解密操作。是一款非常简便实用的在线Java…

AC自动机详解,原理、优化分析,代码实现

零、前言 对于模式串匹配问题&#xff0c;在很多基础的数据结构课程中都有涉及到&#xff0c;如 KMP 算法&#xff0c;BM算法&#xff0c;Trie。 但是给定文本串&#xff0c;我们有多个模式串要去查询。难道要多次调用KMP / BM&#xff0c;或者在Trie上多次查询吗&#xff1f…

2024 研究生数学建模竞赛(F题)建模秘籍|X射线脉冲星光子到达时间建模|文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;运用轨道动力学模型&#xff0c;脉冲轮廓折叠&#xff0c;几何传播时延模型&#xff0c;相对论修正计算&#xff0c;泊松分布模拟等强大工具&#xff0c;构建了这一题的详细解答哦&#xff01; 为大家量…

数据预处理方法—数据标准化和数据归一化

1.数据标准化 1.1 概念&#xff1a; 标准化是将数据转化为均值为0&#xff0c;标准差为1的分布。通过标准化处理&#xff0c;所有特征在同一个尺度上&#xff0c;使得模型更加稳定和高效&#xff0c;尤其适用于正态&#xff08;高斯&#xff09;分布的数据。 1.2 原理 标准化…

【HTTP】构造HTTP请求和状态码

状态码 用于响应中&#xff0c;表示响应的结果如何 正确&#xff1f;错误&#xff1f;什么原因&#xff1f; HTTP 中的状态码都是标准约定好的 200 OK 成功了&#xff0c;一切顺利 在抓包到的响应中 404 Not Found 访问的资源&#xff08;URL 中的路径&#xff09;没找…

【已解决】编译报错:fatal error: Eigen/Core: 没有那个文件或目录 #include <Eigen/Core>

1、如果没有安装过Eigen&#xff0c;可以使用以下git指令进行下载&#xff0c;或者也可以通过以下网址下载 git clone https://gitlab.com/libeigen/eigen.git网址1&#xff1a;https://eigen.tuxfamily.org/index.php?titleMain_Page 网址2: https://gitlab.com/libeigen/ei…

BeautifulSoup与lxml解析网页:技术详解与实战案例

目录 一、引言 1.1 网页解析的重要性 1.2 BeautifulSoup与lxml简介 二、安装BeautifulSoup和lxml 三、BeautifulSoup基础 3.1 创建BeautifulSoup对象 3.2 基本元素 3.3 遍历和搜索文档树 3.4 CSS选择器 四、lxml基础 4.1 解析HTML 4.2 XPath选择器 4.3 CSS选择器 …

简单多状态dp第二弹 leetcode -删除并获得点数 -粉刷房子

740. 删除并获得点数 删除并获得点数 分析: 使用动态规划解决 这道题依旧是 打家劫舍I 问题的变型。 我们注意到题目描述&#xff0c;选择 x 数字的时候&#xff0c; x - 1 与 x 1 是不能被选择的。像不像 打家劫舍 问题中&#xff0c;选择 i 位置的金额之后&#xff0c;就不…

C++速通LeetCode中等第20题-随机链表的复制(三步简单图解)

方法图解&#xff1a; class Solution { public:Node* copyRandomList(Node* head) {if ( !head ) {return nullptr;}Node *cur head;// 1. 在原节点的每个节点后创建一个节点while ( cur ) {Node *newNode new Node(cur -> val);newNode -> next cur -> next;cur …

大小端字节序 和 内存高低地址顺序

目录 1. 大小端字节序 1.1 什么是大小端字节序&#xff1f; 1.2 为什么有大小端字节序? 1.3 习题&#xff1a;用程序结果判断大端小端 2. 各种易混淆的高低地址顺序 2.1 监视窗口的地址表示【计算机标准展示方式】 2.2 横向地址表示 2.3 一个字节 与 多个字节 的地址…

g1:基于 Llama,用提示工程实现类似 o1 的深度推理

开源项目 g1 利用巧妙的提示策略&#xff0c;在 Groq 硬件上使用 Llama-3.1 70b 模型实现了类似 OpenAI o1 的推理链能力。g1 将推理过程可视化&#xff0c;并结合多种技巧引导 LLM 进行深度思考&#xff0c;显著提升了其在逻辑问题上的准确率&#xff0c;为 LLM 推理能力的提升…

Win10 安装Node.js 以及 Vue项目的创建

一、Node.js和Vue介绍 1. Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它允许你在服务器端运行 JavaScript&#xff0c;使得你能够使用 JavaScript 来编写后端代码。以下是 Node.js 的一些关键特点&#xff1a; 事件驱动和非阻塞 I/O&#xff1a;Node…

【24华为杯数模研赛赛题思路已出】国赛F题第二套思路丨附参考代码丨免费分享

2024年数模研赛E题解题思路 X 射线脉冲星光子到达时间建模思路分析 该题目是天文学背景的数学建模题目&#xff0c;其涉及到物理学中关于光线传播过程受多种因素的共同干扰的复合模型&#xff0c;以及天体和卫星的坐标变换和运动模型&#xff0c;首先我们要&#xff0c;建立卫…

JavaScript使用leaflet库显示信息窗口

前言 我们可千万不能忘记我们之前花的流程图哦&#xff0c;我们所有的计划都按照我们的流程图来去构建&#xff1b; 我们已经完成了&#xff0c;页面的加载&#xff0c;也已经完成获取用户当前的位置坐标&#xff0c;并且我们通过地图的API将当前的位置在地图中渲染出来&…

基于协同过滤推荐算法的影视推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目源码、Python精…

缓存数据和数据库数据一致性问题

根据以上的流程没有问题&#xff0c;但是当数据变更的时候&#xff0c;如何把缓存变到最新&#xff0c;使我们下面要讨论的问题 1. 更新数据库再更新缓存 场景&#xff1a;数据库更新成功&#xff0c;但缓存更新失败。 问题&#xff1a; 当缓存失效或过期时&#xff0c;读取…

【C++】C++库:如何链接外部库、静态链接和动态链接,以及如何自建库并使用

十三、C库&#xff1a;如何链接外部库、静态链接和动态链接&#xff0c;以及如何自建库并使用 本篇讲C库&#xff0c;先讲如何在项目中使用外部库&#xff0c;包括静态链接和动态链接的实现&#xff1b;再讲如何在VisualStudio中自建模块或库项目&#xff0c;让所有项目都能使…

Java-数据结构-排序-(一) (。・ω・。)

文本目录&#xff1a; ❄️一、排序的概念及引用&#xff1a; ➷ 排序的概念&#xff1a; ➷ 常见的排序算法&#xff1a; ❄️二、插入排序的实现&#xff1a; ➷ 1、直接插入排序&#xff1a; ☞ 直接插入排序的基本思想&#xff1a; ☞ 直接插入排序的实现&#xff1a; ▶…

OBB-最小外接矩形包围框-原理-代码实现

前言 定义&#xff1a;OBB是相对于物体方向对齐的包围盒&#xff0c;不再局限于坐标轴对齐&#xff0c;因此包围点云时更加紧密。优点&#xff1a;能够更好地贴合物体形状&#xff0c;减少空白区域。缺点&#xff1a;计算较为复杂&#xff0c;需要计算物体的主方向&#xff0c…

linux 操作系统下dhcpd命令介绍和案例应用

linux 操作系统下dhcpd命令介绍和案例应用 DHCP&#xff08;动态主机配置协议&#xff09;在Linux操作系统中用于自动为网络中的设备分配IP地址和其他网络配置 DHCP的基本概念 DHCP协议通过UDP工作&#xff0c;主要有两个用途&#xff1a; 自动分配IP地址给网络中的设备。提…