尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
深入解析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即可打印地址处存放的字符串一级指针的加减跳过一个元素二级指针的加减跳过一个地址的地址三级指针的加减跳过一个二级指针的地址
RELATED

相关推荐

IT66313:HDMI 2.1 Retimer

IT66313:HDMI 2.1 Retimer

IT66313 是一种单输入单输出的 HDMI 重定时缓冲器,支持每信道最高 12Gbps 的信令传输速率。它符合最新的HDMI 2.1b规范,并且向下兼容HDMI 1.4b/2.0b规范。凭借48 Gbps/4频道能力,IT66313支持超高分辨率内容流,如超高清8Kx4K格式。…

📅 2026/9/20 14:01:59
IT66318:HDMI 2.0 Retimer

IT66318:HDMI 2.0 Retimer

IT66318 是一个单输入单输出的 HDMI 2.0 重定时缓冲器,支持最高 6.0 Gbps 的信号速率。它符合最新的 HDMI 2.0a 规范,并且向下兼容 HDMI 1.4 规范。凭借6.0 Gbps能力,IT66318支持超高分辨率内容流,如4K x 2K60Hz格式。在极高的数据…

📅 2026/8/23 9:22:24
IT66319:HDMI 2.1 Retimer

IT66319:HDMI 2.1 Retimer

IT66319 是一个单输入单输出的 HDMI 重定时缓冲器,支持每通道最高 12 Gbps 的信号传输速率。它符合最新的HDMI 2.1a规范,并且向下兼容HDMI 1.4x/2.0x规范。凭借48 Gbps/4频道能力,IT66319支持超高分辨率内容流,如超高清8K x 4K格式…

📅 2026/8/23 9:22:24
MORE NEWS

更多资讯

📰

一条命令批量生成100条视频:Hypit多Agent视频生产管线实战

1. 从一条命令说起:这个开源项目到底在解决什么问题第一次看到“一条命令复刻100条爆款视频”这个说法,我的反应是:要么是标题党,要么背后有一套相当成熟的模板化生产管线。花了两天把项目源码和配套的Agent工作流跑通之后&#x…

📰

动态图神经网络DGNN实战:异常流量检测从pcap到线上部署

简介:这份资源面向计算机、人工智能及网络安全方向的学习者与研究人员,提供一套基于动态图神经网络的异常流量检测完整实现方案,用于解决传统静态拓扑方法在动态网络环境中准确率与效率不足的问题。压缩包共141个文件,约34.94MB&a…

📰

YOLOv8跌倒检测实战:数据集、训练源码与部署全链路拆解

简介:这份资源面向计算机视觉入门与进阶开发者、安防监控场景的算法实践者,提供一套可直接运行的YOLOv8跌倒检测训练方案,帮助解决从数据准备到模型部署的完整链路问题。压缩包共1438个文件,约78.41MB,其中1428张jpg图…

📰

Socket通讯实战:从核心原理到高频报错排查

Socket通讯这几个字,往小了说是两台机器之间传数据,往大了说,整个互联网的基石就是它。我在日常工作里跟Socket打交道太频繁了,从写个Python小脚本抓数据,到排查线上MySQL连不上的诡异故障,最后十有八九都会…

📰

全栈AI修图Agent实战复盘:架构设计、Agent机制与多端落地

“又一个新项目完结”——这句话说出来的时候,我其实还没完全缓过来。这个全栈 AI 修图 Agent 从立项到收尾,前后折腾了几个月,中间推翻过两版架构,也踩了不少多端适配和模型调用的坑。趁着热乎劲还在,我把整个项目的设…

📰

开源AI模型实践指南:从选型、部署到调优的完整路线图

说句实话,这个标题我们自己写出来都有点不好意思。“全网最全”四个字,放在任何一个正经技术社区里,都容易被人挂起来嘲讽。但最后我们还是用了,而且把整个文档仓库直接开源了。原因很简单:我们在整理这份 AI 开源模型…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬