深入解析qsort与冒泡排序
目录一qsort函数二模仿qsort函数利用冒泡排序排序任意类型的数据三sizeof和strlen对比四指针例题1指针-整数2指针-指针3指针复杂计算案例一qsort函数qsort函数作为库函数可以直接用来排序任意类型的数组只需要向里面传递合理的参数即可。语法void qsort(void* basesize_t numsize_t sizeint (*compar)(const void*const void*))分析1base是一个指针指向待排序的数组中的第一个元素2num是数组指向待排序的数组的元素个数3size是一个数组元素的大小4*compar)(const void*const void*)是一个函数指针这个函数指针用来进行补充数组元素排序的规则tmp_t函数的返回值有三种当p1p2时返回正数当p1p2时返回负数当p1p2时返回0p1和p2分别为数组的第一个元素和第二个元素的地址写成p1减p2是升序写成p2减p1是降序strcmp()函数:用来比较字符串的大小p1大于p2返回正数p1小于p2返回负数p1等于p2返回0头文件为include string.h二模仿qsort函数利用冒泡排序排序任意类型的数据分析bubble_sort函数模仿qsort函数设置四个相同的形参。冒泡排序的比较为了保持能通用任意数据利用基地址base转化为char*类型的指针进行地址加减时让步进单位变成一个字节。可以满足不同大小的数据类型的输入。交换同理为了满足任意类型数据的交换设置一个函数这个函数同样以一个字节为单位利用循环一次交换一个字节和数据的大小width实现不同类型元素的交换。对于不同类型的元素冒泡排序是通用的交换也是通用的。不通用的是不同类型元素的比较方法。三sizeof和strlen对比sizeof:1,sizeof是操作符2sizeof计算操作数在内存中所占大小3sizeof不关注操作数中的具体内容补充sizeof括号中的表达式不进行计算sizeof中的内容是地址就一定为4/8例子原因一个文件test.c需要经过编译链接生成test.exe可执行程序再进行运行。sizeof在编译时就需要进行计算。而表达式则需要在运行时才真正计算此时表达式已经使用了。strlen:1,strlen是库函数需要包含头文件#include string.h2,strlen只能计算字符串的大小即字符串中\0前的元素个数。3关注具体内容如果没有“\0就会越界访问继续寻找\0最后生成一个随机数。运用例子1char arr[] abcdef;printf(%d\n, sizeof(arr));运行结果为7arr单独放在sizeof中表示的是整个数组的大小算上“\0总共7个字符。2*arr和arr[1]分别为a和bstrlen遇到实际值时报错只有是地址时会顺着地址找”\0“,遇到时终止。arr 1表示跳过整个数组后的地址没有”\0“,不知道多久遇到”\0“故生成随机值。arr就表示arr整个数组的地址取最小的就是第一个元素的地址。34四指针例题1指针-整数分析根据结构体成员的内存对齐规则结构体的大小为24个字节同时十六进制的0x1其实就是十进制的1加1的大小跟前面是什么类型的数据密切相关展示1,p1 : 0x10000018(24转化为16进制的值0x1000182,p1: 0x100000(数值)1 0x1000013,p1: 0x1000004(int*的大小0x1000042指针-指针分析主要分析p[4][2]的位置。p是一个数组指针指向含有四个元素的数组。已知pa;则p的首元素的地址即为a的首元素的地址。p[4][2]*(*(p4)2)*(p4)a[3][1]因为p为指向一个有四个整形元素的数组的地址数组指针一次跳过四个元素跳过16个就在a[3][1],此时在跳过2个整数就到了a[3][3],a[3][3]和a[4][2]之间差了4个字节。地址差计算p[4][2] - a[4][2] (p 4)[2] - (a 4)[2] (p 4 * 4 2) - (a 4 * 5 2) (p 18) - (a 22) -4故第二个值为-4由于第一个值是地址所以要将-4从补码转化为原码再转化为16进制的地址。-4的补码就是0xFFFFFFFC3指针复杂计算案例分析一级指针表示首元素的地址例如E N P F二级指针表示地址的地址即首元素地址的地址利用地址加上%s即可打印地址处存放的字符串一级指针的加减跳过一个元素二级指针的加减跳过一个地址的地址三级指针的加减跳过一个二级指针的地址

相关新闻

HarmonyOS应用开发实战:萌宠日记 - 自定义 TabBar 设计与图标渲染

HarmonyOS应用开发实战:萌宠日记 - 自定义 TabBar 设计与图标渲染

HarmonyOS应用开发实战:萌宠日记 - 自定义 TabBar 设计与图标渲染 前言 TabBar 是底部导航栏的 视觉呈现核心,它直接影响用户对应用的第一印象和操作体验。在 萌宠日记 中,我们使用 Builder 装饰器 自定义了 TabBar 的渲染方式,实…

2026/7/22 23:14:07阅读更多 →
腾龙加密播放器,2026新版本--分享给同学

腾龙加密播放器,2026新版本--分享给同学

很多同学一直在寻找的,,我的课程能不能改为MP4高清画质视频,答案,是肯定可以的呀。 腾龙加密播放器,2026新版本--分享给同学,高清MP4格式 奶奶再也不担心我看课程了 进入--分享链接 尘封三年-王者归来 …

2026/7/22 23:12:07阅读更多 →
Openship:开源可自托管部署平台,内置 CI/CD 功能,多方式操作超便捷!

Openship:开源可自托管部署平台,内置 CI/CD 功能,多方式操作超便捷!

Openship:开源、可自托管的部署平台,内置 CI/CD 功能如何完成推送代码、部署容器、管理基础设施这些操作呢?可以通过桌面应用程序、Web 仪表盘或命令行界面(CLI)来完成。快速开始安装方面,有两种方式&#…

2026/7/22 23:12:07阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:02:29阅读更多 →
2026年下半年量化学习,不同基础要查不同缺口

2026年下半年量化学习,不同基础要查不同缺口

从手工交易规则转向量化表达时,并不存在一条对所有人都同样顺畅的路径。不同基础的人,看似面对同一个目标,实际卡点可能完全不同。AI 的作用也应随之调整,帮助读者检查自己最容易忽略的部分。规则要先变得可检查如果读者更习惯用经…

2026/7/23 0:02:29阅读更多 →
最新量化实现前,先让AI检查逻辑参数和流程缺口

最新量化实现前,先让AI检查逻辑参数和流程缺口

从手工交易转向量化表达时,很多问题看起来像代码问题,实际上先是规则问题。只要规则没有讲清,流程没有闭合,再熟悉实现方式也会反复返工。AI 可以帮助读者提前检查这些缺口,让注意力回到规则本身。让 AI 先帮你把问题问…

2026/7/23 0:02:29阅读更多 →
LangChain Agent开发入门:从零构建智能决策AI

LangChain Agent开发入门:从零构建智能决策AI

1. 项目概述:LangChain Agent开发入门最近在AI应用开发领域,LangChain的Agent功能引起了广泛关注。作为一个让大语言模型(LLM)具备自主决策能力的框架,它能让开发者构建出真正"会思考"的AI应用。今天我就带大家从零开始&#xff0c…

2026/7/23 0:00:28阅读更多 →
AI训推一体化平台架构设计与工程实践

AI训推一体化平台架构设计与工程实践

1. 项目概述"AI模型训练与推理一体化平台"是当前企业级AI应用落地的核心基础设施。作为一名在AI工程化领域深耕多年的从业者,我见证了这个领域从早期的训练与推理分离架构,到如今训推一体化的完整演进过程。这种平台本质上是通过统一的软硬件架…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →