Project回调函数qsort②进阶应用

news/2025/3/16 16:36:02/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
//库函数strcmp头文件
//使用qsort排序结构体

struct Stu
{
    char name[20];
    int age;
};

//按照年龄排序
int cmp_stu_by_age(const void* e1,const void* e2)
{
    return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;

    //错误写法:return *((struct Stu*)e1)->age - *((struct Stu*)e2)->age;
    //错误原因:((struct Stu*)e1)->age,((struct Stu*)e2)->age 已经拿到结构体数组元素了,
    //            不需要再用解引用 * 通过地址去找它们。

}
//按照名字排序
int cmp_stu_by_name(const void* e1, const void* e2)
{
    return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);

    //库函数:strcmp
    //比较字符串大小

}
int main()
{
    struct Stu s[3] = { {"wanger",45},{"zhangsan",20},{"lisi",19} };
    int sz = sizeof(s) / sizeof(s[0]);
    qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
    int i = 0;
    for(i=0;i<sz;i++)
    {
        printf("name: %s,age: %d\n", s[i].name, s[i].age);
    }
    printf("\n");
    qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
    for (i = 0; i < sz; i++)
    {
        printf("name: %s,age: %d\n", s[i].name, s[i].age);
    }
    return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>//库函数strcmp头文件
//使用qsort排序结构体
struct Stu
{char name[20];int age;
};
//按照年龄排序
int cmp_stu_by_age(const void* e1,const void* e2)
{return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;//错误写法:return *((struct Stu*)e1)->age - *((struct Stu*)e2)->age;//错误原因:((struct Stu*)e1)->age,((struct Stu*)e2)->age 已经拿到结构体数组元素了,//            不需要再用解引用 * 通过地址去找它们。
}
//按照名字排序
int cmp_stu_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);//库函数:strcmp//比较字符串大小
}
int main()
{struct Stu s[3] = { {"wanger",45},{"zhangsan",20},{"lisi",19} };int sz = sizeof(s) / sizeof(s[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);int i = 0;for(i=0;i<sz;i++){printf("name: %s,age: %d\n", s[i].name, s[i].age);}printf("\n");qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);for (i = 0; i < sz; i++){printf("name: %s,age: %d\n", s[i].name, s[i].age);}return 0;
}


思考:

为什么compare函数返回时用的是->,而main函数内打印时用的是.呢?

在C语言中, ->运算符和.运算符都是用于访问结构体成员的,但它们的使用场景不同。

->运算符用于通过指针访问结构体成员。在  compare  函数中,参数  a  和  b  是  const void* 类型的指针,
在函数内部将它们强制转换为  struct MyStruct* 类型的指针  s1  和  s2 ,所以使用->来访问结构体成员  num ,
如  s1->num 。

.运算符用于通过结构体变量直接访问结构体成员。在  main  函数中, arr  是结构体数组, 
arr[i]  是一个结构体变量,因此使用.来访问结构体成员  num  和  str ,如  arr[i].num  和  arr[i].str 。


http://www.ppmy.cn/news/1579607.html

相关文章

Qt常用控件之网格布局QGridLayout

网格布局QGridLayout QGridLayout 是一个网格布局控件&#xff0c;它与 QVLayout 和 QHLayout 的不同在于&#xff0c;QGridLayout 能够允许自定义控件放入布局中所处的行和列。 1. QGridLayout属性 属性说明layoutLeftMargin左侧边距。layoutRightMargin右侧边距。layoutTo…

【推荐项目】 043-停车管理系统

043-停车管理系统 介绍 使用 springboot vuejs mysql 技术搭建框架。 智能停车管理系统描述 后端框架&#xff1a;采用Spring Boot与MySQL的强强联合&#xff0c;为系统提供稳健、高效的服务支撑。 前端框架&#xff1a;前端选用Vue.js&#xff0c;打造流畅、美观的用户交…

Python 元组求生指南:不可变数据的终极奥义

对话实录 小白&#xff1a;&#xff08;抓狂&#xff09;我写了t (1,2,3)&#xff0c;为什么t[0] 10会报错&#xff1f; 专家&#xff1a;&#xff08;推眼镜&#xff09;元组是不可变对象&#xff01;想修改&#xff1f;只能新建元组&#xff01; 元组基础三连击 1. 创建…

Huggingface命令行下载开源大模型

Huggingface命令行下载模型 假设当前目录为 /root/lanyun-tmp 创建文件夹统一存放Huggingface下载的模型 mkdir Hugging-Face配置镜像源 vim ~/.bashrc填入以下两个&#xff0c;以修改HuggingFace 的镜像源 、模型保存的默认 export HF_ENDPOINThttps://hf-mirror.com export H…

深度学习-服务器训练SparseDrive过程记录

1、cuda安装 1.1 卸载安装失败的cuda 参考&#xff1a;https://blog.csdn.net/weixin_40826634/article/details/127493809 注意&#xff1a;因为/usr/local/cuda-xx.x/bin/下没有卸载脚本&#xff0c;很可能是apt安装的&#xff0c;所以通过执行下面的命令删除&#xff1a; a…

浙江大学:《DeepSeek智能时代的全面到来和人机协作的新常态》

大家好&#xff0c;我是吾鳴。 吾鳴之前给大家分享过浙江大学出品的DeepSeek的三份报告&#xff0c;它们分别是&#xff1a; 《DeepSeek行业应用案例集-解锁智能变革密码》 《DeepSeek模型解读》 《Chatting or Acting&#xff1f;DeepSeek的突破边界与浙大先生的未来图景》…

IXTUR气控永磁铁:以高精度气控和稳定磁场,为机器人应用提供稳定抓取力

在现代工业生产和物流领域&#xff0c;物料的抓取与搬运是影响生产效率和成本控制的重要环节。传统夹爪在面对不同材质、形状和重量的物体时&#xff0c;常常存在适应性差、抓取不稳定、操作复杂等问题&#xff0c;导致生产流程中频繁出现停机调整&#xff0c;增加了人工干预成…

机器人ROS学习:Ubuntu22.04安装ROS2和Moveit2实现运动规划

通过本篇文章学习&#xff0c;你可以收获以下内容&#xff1a; 学会在 Ubuntu22.04 上安装 Moveit2学会下载编译运行 Moveit2 样例程序学会使用样例程序进行运动规划等 版本平台 系统版本&#xff1a;ubuntu22.04ROS2 版本&#xff1a;humbleMoveit 版本&#xff1a;moveit2…