深入了解指针(7)

文章目录

    • 1.qrost的使用
    • 2.qrost函数的模拟实现

1.qrost的使用

qrost—库函数—可以实现任意数据类型的快速排序。

void qsort(void* base, //base中存放的是待排序数组的第一个元素的地址
size_t num, //num存放的是base指向的数组中的元素个数
size_t size, //size是base指向的数组中一个元素的长度,单位是字节
int (compar)(const voidp1, const voidp2) //函数指针-指向了一个比较函数,这个比较函数是用来比较数组中的两个元素的
//如果p1指向的元素大于p2指向的元素,那么函数返回>0的数字
如果p1指向的元素等于p2指向的元素,那么函数返回0
如果p1指向的元素小于p2指向的元素,那么函数返回<0的数字 );
void
类型的指针不能解引用操作符,也不能+/-整数的操作
这种指针变量一般是用来存放地址的
使用之前要强制类型转换成想要的类型
char类型:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void com(const void* p1, const void* p2)
{return (*(char*)p1 - *(char*)p2);
}
int main()
{     //qsort函数的实现char arr[] = "fd gas";size_t a = strlen(arr);qsort(arr, a, sizeof(arr[0]), com);for (int i = 0; i < a; i++){printf("%c ", arr[i]);}return 0;
}

在这里插入图片描述
int 类型:

void com(const void* p1, const void* p2)
{return (*(int*)p1 - *(int*)p2);
}
int main()
{     //qsort函数的实现int arr[] = {2,6,8,4,5,3,1,7,9,10};size_t a = sizeof(arr) / sizeof(arr[0]);qsort(arr, a, sizeof(arr[0]), com);for (int i = 0; i < a; i++){printf("%d ", arr[i]);}return 0;
}

在这里插入图片描述
结构体类型:

#include<stdio.h>
struct stu
{char name[15];//名字int  age;//年龄
};
int com_age(const void* p1, const void* p2)
{return (*(struct stu*)p1).age - (*(struct stu*)p2).age;
}
int main()
{     //qsort函数的实现struct stu arr[3] = { {"liuxin",18},{"zhangsan",20},{"wangwu",16} };size_t a = sizeof(arr) / sizeof(arr[0]);qsort(arr, a, sizeof(arr[0]), com_age);for (int i = 0; i < a; i++){printf("%d ",arr[i].age);}return 0;
}

在这里插入图片描述
结构体中名字的比较:

#include<string.h>
struct stu
{char name[15];//名字int  age;//年龄
};
//名字是字符串不能直接相减来比较
//使用strcmp函数来比较
//strcmp(字符串1,字符串2)
//如果字符串1>字符串2 返回>0   字符串1=字符串2返回=0      字符串1<字符串2返回<0
//strcmp从字符串的第一个字符开始比较  若第一个字符相等则向后推一个
char com_name(const void* p1, const void* p2)
{return strcmp( (*(struct stu*)p1).name,(*(struct stu*)p2).name);
}
int main()
{     //qsort函数的实现struct stu arr[3] = { {"liuxin",18},{"zhangsan",20},{"wangwu",16} };size_t a = sizeof(arr) / sizeof(arr[0]);qsort(arr, a, sizeof(arr[0]), com_name);for (int i = 0; i < a; i++){printf("%s ",arr[i].name);}return 0;
}

在这里插入图片描述

2.qrost函数的模拟实现

这个是int类型的想实现其他类型需要改cmp和打印的方式

int cmp(const void* p1, const void* p2)
{return (*(int*)p1 - *(int*)p2);
}
void jh(char* e1, char* e2, size_t with)
{for (int i = 0; i < with; i++){char a = *e1;*e1 = *e2;*e2 = a;*e1++;*e2++;}
}
void myself_qsort(void *base, size_t num,size_t with,int (*cmp)(const void *p1,const void *p2)) //这里可以看文章开头有解释
{for (int i = 0; i < num-1; i++){for (int j = 0; j < num-1-i; j++){if (cmp((char*)base+j*with,(char*)base+(j+1)*with)>0){jh((char*)base + j * with, (char*)base + (j + 1)*with,with);}}}
}
int main()
{int arr[] = { 2,6,5,7,9,8,4,3,1,10 };size_t num = sizeof(arr) / sizeof(arr[0]);myself_qsort(arr, num, sizeof(arr[0]), cmp);for (int a = 0; a < num ; a++){printf("%d  ", arr[a]);}return 0;
}

在这里插入图片描述
持续指针系列

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

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

相关文章

《学会 SpringBoot 系列 · spring.factories 详解》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

mysql 物理备份 MySQL 全量备份 增量备份 差异备份 日志备份万字长文 1.3万字

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循版权协议&#xff0c;转载请附上原文出处链接和本声明 注意&#xff0c;通常 完备增备&#xff0c;日志&#xff08;binlog)备&#xff0c;结合使用 差异则根据具体情况选用。 此备份过程 属于公司 常用的单个数据…

凹凸纹理概念

1、凹凸纹理 纹理除了可以用来进行颜色映射外&#xff0c;另外一种常见的应用就是进行凹凸映射。凹凸映射的目的是使用一张纹理来修改模型表面的法线&#xff0c;让我们不需要增加顶点&#xff0c;而让模型看起来有凹凸效果。原理&#xff1a;光照的计算都会利用法线参与计算&…

数的个位相加

给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。返回这个结果。 示例 1: 输入: num 38输出: 2 解释: 各位相加的过程为&#xff1a; 38 --> 3 8 --> 11 11 --> 1 1 --> 2 由于 2 是一位数&#xff0c;所以返回 2。…

搜维尔科技:驾驶模拟器背后的技术: Varjo的虚拟/混合现实 (VR/XR)提供独特的优势,最终加快汽车开发创新的步伐

专业驾驶模拟器广泛应用于车辆开发&#xff0c;帮助汽车行业在开发过程的早期做出更好的设计决策。总体目标是为测试驾驶员提供最真实的驾驶体验&#xff0c;包括动态动作和声音&#xff0c;并测试控制算法或辅助系统等功能。环境越真实&#xff0c;驾驶员的体验就越接近最终车…

视觉SLAM ch3补充——在Linux中配置VScode以及CMakeLists如何添加Eigen库

ch3中的所有代码&#xff0c;除了在kdevelop中运行&#xff0c;还可以在VScode中运行。下面将简要演示配置过程&#xff0c;代码不再做解答&#xff0c;详细内容在下面的文章中。&#xff08;这一节中的pangolin由于安装过程中会出现很多问题&#xff0c;且后续内容用不到该平台…

自动化解决 reCAPTCHA v2:CapSolver 教程

对于那些经常进行网页爬取的人来说&#xff0c;你是否曾觉得 reCAPTCHA v2 就像是互联网版的过于严格的裁判员&#xff0c;总是在质疑你的真实性&#xff1f;但如果你能够轻松且合规地与这些裁判员达成和解&#xff0c;使你的网络搜索和自动化任务变得更顺畅&#xff0c;那该有…

k8s部署kubeadm init初始化不成功,coredns处于pending,master和nodes处于notready状态

声明&#xff1a;本文仅为个人学习笔记使用&#xff0c;解决方法参考原文&#xff1a; https://blog.csdn.net/Harry_mumu/article/details/132099876 在部署完k8s集群后&#xff0c;节点一直处于notready状态&#xff08;master和nodes&#xff09; 查看kubectl get pods -n…

全球海事航行通告解析辅助决策系统

“全球海事航行通告解析辅助决策系统”是一个针对海事行业设计的智能系统&#xff0c;旨在帮助海上导航和航运操作人员解析和应对全球发布的海事航行通告。 要做这样的系统我们必须要了解海事签派员的日常工作。 海事签派员&#xff0c;也称为船舶操作员或船运调度员&#xff0…

HanLP分词的使用与注意事项

1 概述 HanLP是一个自然语言处理工具包&#xff0c;它提供的主要功能如下&#xff1a; 分词转化为拼音繁转简、简转繁提取关键词提取短语提取词语自动摘要依存文法分析 下面将介绍其分词功能的使用。 2 依赖 下面是依赖的jar包。 <dependency><groupId>com.ha…

替代进程注入的新工具

目录 前言 Windows Session 的利用 Windows Session 介绍 跨会话激活技术 什么是跨会话激活机制&#xff1f; 常见的跨会话激活技术 结合利用 地址 前言 众所周知&#xff0c;常用的C2工具&#xff08;例如CobaltStrike&#xff09;在另一个进程上下文中执行代码经常使…

【Android】不同系统版本获取设备MAC地址

【Android】不同系统版本获取设备MAC地址 尝试实现 尝试 在开发过程中&#xff0c;想要获取MAC地址&#xff0c;最开始想到的就是WifiManager&#xff0c;但结果始终返回02:00:00:00:00:00&#xff0c;由于用得是wifi &#xff0c;考虑是不是因为用得网线的原因&#xff0c;但…

Fultter项目中IOS打包问题整理(附带解决方案)

Fultter项目中IOS打包问题整理&#xff08;附带解决方案&#xff09; 问题一&#xff1a;CocoaPods 在你的项目中找不到名为 AlicloudPush 版本为 ~> 1.9.1 的 Pod 规范。报错信息问题分析解决方法 问题二&#xff1a;ruby版本问题报错信息问题分析问题原因解决方法 问题三&…

WPS真题题库导入刷题小程序:个人使用经验分享

这篇文章的诞生&#xff0c;是因为我即将踏上一场超级有趣的挑战——备考全国计算机等级二级WPS Office高级应用与设计的冒险之旅&#xff01; WPS的分值&#xff1a; 单项选择题20分(含公共基础知识部分10分)。 WPS处理文字文档操作题30分。 WPS处理电子表格操作题30分。 …

挑战程序设计竞赛c++(第一天)1.抽签(枚举,二分法查找)2.三角形(暴力枚举)

方法一&#xff1a; #include<iostream> #include<algorithm> #include<vector>using namespace std; char flag0; int n0; int m0; int shu[1000]{0}; int i; int main() {cin >> n;cin >> m;for (i0;i<n;i){cin >> shu[i];}vector&l…

Design Compiler——综合及debug流程

文章目录 前言一、什么是综合&#xff1f;二、综合的流程1. Develop HDL files2. Specify libraries3. Read design4. Define design environment5. Set design constraints6. Select compile strategy7. Synthesize and optimize the design8. Analyze and resolve design pro…

idea 中的properties文件中文乱码

如遇到以下类似的问题&#xff1a; 配置setting中-》Editor-》File Encodings 中&#xff0c;将以下三处位置的编码格式进行修改 Global Encoding GBK Project Encoding GBK Default encoding for properties files UTF-8 修改之后文件的中文显示正常

老友记台词 第一季 第十四集 Friends 114(全英版)

文章目录 V114 The One With the Candy Hearts[Scene: Central Perk, Ross is eyeing a beautiful woman at the counter, and Joey and Chandler are egging him on to go talk to her. No pun intended. I mean it.][Scene: Central Perk, Monica, Rachel, Phoebe, Joey, Cha…

从源码到应用:医疗陪诊系统与在线问诊小程序开发详解

在数字化医疗时代&#xff0c;医疗陪诊系统与在线问诊小程序的开发成为了医疗机构和技术公司关注的焦点。接下来&#xff0c;小编将与您一同深入了解。 一、医疗陪诊系统的核心功能 医疗陪诊系统旨在为患者提供更贴心的医疗服务&#xff0c;通过专业人员陪同患者完成就医过程。…

【C语言篇】C语言常考及易错题整理DAY1

文章目录 C语言常考及易错题整理选择题全局、局部和静态变量#define与typedef转义字符操作符循环其他 编程题计算日期到天数转换柯尼希定理旋转数组的最小数字描述错误的集合整数转换密码检查 C语言常考及易错题整理 选择题 全局、局部和静态变量 执行下面程序&#xff0c;正…