尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
深入理解指针(5)学习笔记
一、回调函数回调函数是指通过函数的指针被调用的函数。可以通过这种方式起到简化代码的目的。继续用上一篇笔记中提到的简易计算器举例voidcalc(int(*pf)(intx,inty)){......}......intmain(){......calc(add1);//函数名就是函数地址这里将函数地址的参数传给calcadd1就被称为回调函数}二、qsort函数用于排序整型、浮点型1.认识qsort之前利用冒泡排序对整型变量进行过排序但是这种方法不适用于浮点型变量需要使用qsort函数。qsort函数需要的参数首元素地址函数名、元素个数、每个元素宽度、函数指针指针指向的函数在排序的时候用来比较两个数据的大小关系。需要注意参数四函数中对于比较的两个数a、b如果ab,返回一个大于零的数ab,返回小于零的数ab返回零。使用时要包含头文件“#include stdlib.h”。下面是对整型变量的排序#defineCRT_SECURE_NO_WARNINGS#includestdio.h#includestdlib.hintint_compare(constvoid*p1,constvoid*p2){return(*((int*)p1)-*((int*)p2));}intmain(){intarr[]{2,3,6,8,1,9,10};inti0;intnumsizeof(arr)/sizeof(arr[0]);intsizesizeof(arr[0]);for(i0;inum;i){printf(%d ,arr[i]);}printf(\n);qsort(arr,num,size,int_compare);for(i0;inum;i){printf(%d ,arr[i]);}return0;}下面是对浮点型变量的排序intdouble_compare(constvoid*p1,constvoid*p2){//return(*((double*)p1) - *((double*)p2));注意不要这样写这样会存在double类型向int类型的转换//类型转换的时候会直接丢掉小数点后所有比如-0.7被当成0判断两数相等。doublea*((double*)p1);doubleb*((double*)p2);if(ab)return1;elseif(ab)return-1;elsereturn0;}intmain(){doublearr[]{2.3,3,6.1,8,1,9,10};inti0;intnumsizeof(arr)/sizeof(arr[0]);intsizesizeof(arr[0]);for(i0;inum;i){printf(%.1f ,arr[i]);}printf(\n);qsort(arr,num,size,double_compare);for(i0;inum;i){printf(%.1f ,arr[i]);}return0;}中间标注了一处明显区别需要注意容易出错的根源在于double类型向int类型转换时的数据丢失。三、qsort函数用于排序结构体数据首先补充结构体成员访问操作符相关1、变量名.成员 2、变量指针-成员下面是用年龄和姓名两种方式排序结构体数据的代码structstu{charname[30];//注意储存的大小intage;};intcom_age(constvoid*p1,constvoid*p2){return(((structstu*)p1)-age-((structstu*)p2)-age);}intcom_name(constvoid*p1,constvoid*p2){returnstrcmp(((structstu*)p1)-name,((structstu*)p2)-name);}voidtest1()//无参数无返回值{structstus[]{{zhangsan,18},{wangwu,17},{lisi,20}};intnumsizeof(s)/sizeof(s[0]);intsizesizeof(s[0]);qsort(s,num,size,com_age);inti0;for(i0;inum;i){printf(%s %d ,s[i].name,s[i].age);}printf(\n);}voidtest2(){structstus[]{{zhangsan,18},{wangwu,17},{lisi,20}};intnumsizeof(s)/sizeof(s[0]);intsizesizeof(s[0]);qsort(s,num,size,com_name);inti0;for(i0;inum;i){printf(%s %d ,s[i].name,s[i].age);}printf(\n);}intmain(){test1();//用年龄来排序test2();//用姓名来排序return0;}
RELATED

相关推荐

湘美谈教育湘美书院:AI时代的人到中年

湘美谈教育湘美书院:AI时代的人到中年

中年人的AI生存手册:在算法洪流中守住人生锚点写字楼的灯光熄灭时,我站在窗边看着楼下的车水马龙,突然觉得自己像一艘在暴风雨中航行的船。AI浪潮席卷而来,年轻人凭借对新技术的敏感迅速抢占高地,而我们这些中年人&…

📅 2026/10/5 2:38:17
日立电梯CA系列规格表智能编辑工具(兼容CA09/CA13/CA19)

日立电梯CA系列规格表智能编辑工具(兼容CA09/CA13/CA19)

温馨提示:文末有联系方式 工具升级亮点:全新适配日立CA系列规格表智能编辑功能 本工具已完成版本迭代,全面兼容日立电梯CA系列主流机型,尤其针对CA09、CA13与CA19三大常用型号提供深度定制化支持,满足现场调试与参数优…

📅 2026/10/6 0:02:00
飞书文档批量导出实操指南:把整个知识库搬回本地,一条命令就够了

飞书文档批量导出实操指南:把整个知识库搬回本地,一条命令就够了

飞书文档批量导出实操指南:把整个知识库搬回本地,一条命令就够了 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 周五下午,组长丢来一句话:"下…

📅 2026/10/6 15:21:31
MORE NEWS

更多资讯

📰

Lightweight靶机实操:SQL注入、密码复用与tar提权的完整渗透链路

打开一台名为 Lightweight 的 Linux 靶机时,很多人第一反应是“端口这么少,估计很快就能拿 flag”。实际跑一遍就会发现,这台机器几乎没有花哨的漏洞,整条 Walkthrough 就是一次标准的 Web 渗透链路教学:信息收集、虚拟…

📰

一枚回形针的物理与数字之旅:从文具到AI伦理

说实话,我最近一次认真看回形针,是某天晚上翻抽屉,从一盒放了三年的旧文具里捡出一枚,顺手用来够SIM卡槽。那一瞬间我突然意识到:这是个几乎每个人都用过、却几乎没有人正眼看过的小东西。一枚回形针(paper…

📰

AI服务响应异常排查:从CPU、显存到缓存与磁盘的完整实战指南

1. 先搞懂“AI服务响应异常”和其他故障到底差在哪去年秋天的一个凌晨,我正睡得不深,手机连着震了三次——线上告警群炸了:AI服务响应异常,P99延迟从平时的200ms一路冲到了10秒开外,紧接着报错率跟了上来。其实大多数运…

📰

Superpowers实战:为Codex CLI注入规划与思考技能

1. Superpowers 到底是什么:给 Codex CLI 装上"大脑"说实话,第一次把 OpenAI 的 Codex CLI 拉进日常开发流程时,我的第一感觉是:这家伙确实能写代码,但很多时候它太"听话"了——你说"帮我写个…

📰

盾构穿越地下管线的Abaqus数值模拟实践

1. 项目背景与核心价值盾构法作为现代城市地下空间开发的关键技术,在穿越既有地下管线时面临着严峻挑战。去年参与某地铁延伸线项目时,我们遇到了盾构机需在密集管线区下方0.8米处穿越的工况。传统经验公式计算显示地面沉降可能超出警戒值3毫米&#xff…

📰

计算机图形学数媒期末复习:从变换管线到光栅化的核心考点

简介:面向山东大学计算机图形学与数字媒体专业期末备考的复习资料,资源包共1个docx文档,压缩后大小6.87MB。文档重点梳理了图形绘制流水线各阶段、双缓冲的前后端交换机制、投影变换与gluLookAt视图矩阵、全局/局部光照、光线跟踪思路、合成照…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬