深入学习指针(5)!!!!!!!!!!!!!!!
文章目录
- 1.回调函数是什么?
- 2.qsort使用举例
- 2.1使用qsort函数排序整形数据
- 2.2使用sqort排序结构数据
- 3.qsort函数的模拟实现
1.回调函数是什么?
回调函数就是⼀个通过函数指针调⽤的函数。
如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数
时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅直接调⽤,⽽是在特定的事件或条
件发⽣时由另外的⼀⽅调⽤的,⽤于对该事件或条件进⾏响应
#include <stdio.h>
int Add(int x, int y)
{return x + y;
}
int Sub(int x, int y)
{return x - y;
}
int Mul(int x, int y)
{return x * y;
}
int Div(int x, int y)
{return x / y;
}
void cac(int (*pf)(int ,int) )//用所指向函数形式接收
{ int m, n;scanf("%d %d", &m, &n);int c=pf(m,n);printf("%d\n", c);
}
int main()
{int input;do {printf("****1.加法****\n");printf("****2.减法****\n");printf("****3.乘法****\n");printf("****4.除法****\n");printf("****0.退出****\n");scanf("%d", &input);switch (input){case 1:cac(Add);break;case 2:cac(Sub);break;case 3:cac(Mul);break;case 4:cac(Div);break;case 0:break;default:printf("输入错误,请重新输入");break;}} while (input);return 0;
}
2.qsort使用举例
2.1使用qsort函数排序整形数据
#include <stdio.h>
int paixu(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}
int main()
{ int arr[] = { 1,2,5,4,5,7,8,9,6,3 };qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), paixu);int i = 0;for (i = 0;i < sizeof(arr)/sizeof(arr[0]);i++){printf("%d ", arr[i]);}return 0;
}
2.2使用sqort排序结构数据

#include <stdio.h>
#include <stdlib.h>
struct stu
{char name[20];int age;
};
int pum1(const void* e1, const void* e2)
{return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
int main()
{ struct stu arr[3] = { {"zhangsan",15},{"lisi",19},{"wangwu",20} };qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), pum1);}
strcpm比较俩字符串大小,对应位置字符的ASCLL值。
按照年龄来排序,想从大到小排只需改变return两边的位置
#include <stdio.h>
#include <stdlib.h>
struct stu
{char name[20];int age;
};int pum2(const void* e1, const void* e2)
{return (*(struct stu*)e1).age - (*(struct stu*)e2).age;
}
int main()
{ struct stu arr[3] = { {"zhangsan",15},{"lisi",30},{"wangwu",20} };qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), pum2);}
3.qsort函数的模拟实现
#include <stdio.h>
void parr(const void*e1,const void*e2)
{return *(int*)e1 - *(int*)e2;
}
void swap( char* t1, char* t2,size_t width)
{int tmp=0;for (int i = 0;i < width;i++){tmp = *t1;*t1 = *t2;*t2 = tmp;t1++;t2++;}}
void bubble(void* base, size_t sz,size_t width, int (*pa)(const void* e1,const void* e2))
{int i = 0;for (i = 0;i < sz-1;i++){for(int j=0;j<sz-1-i;j++){if ((pa((char*)base + j * width, (char*)base + (j + 1) * width))>0){swap((char*)base +j*width,(char*)base +(j+1)*width,width);}}}
}
int main()
{ int arr[] = { 1,9,8,5,4,6,7,2,3,0 };bubble (arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), parr);for (int i = 0;i < sizeof(arr) / sizeof(arr[0]);i++){printf("%d ", arr[i]);}return 0;
}

相关文章:
深入学习指针(5)!!!!!!!!!!!!!!!
文章目录 1.回调函数是什么?2.qsort使用举例2.1使用qsort函数排序整形数据2.2使用sqort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递…...
离散无记忆信道
目录 离散无记忆信道输入概率输出概率联合分布概率信道逆向概率一些记号示例1示例2 离散无记忆信道 离散:输入输出字母表都是有限的 无记忆:输出字符 d i d_i di 被接收到的概率只依赖于当前的输入 c i c_i ci, 而与前面的输入无关。 一个离散无记…...
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
本篇文章分享关于如何使用STM32单片机对彩色摄像头(OV7725/OV2604)采集的图像数据进行分析处理,最后实现颜色的识别和检测。 目录 一、什么是颜色识别 1、图像采集识别的一些基本概念 1. 像素(Pixel) 2. 分辨率&am…...
《AI产品经理手册》——解锁AI时代的商业密钥
在当今这个日新月异的AI时代,每一位产品经理都面临着前所未有的挑战与机遇,唯有紧跟时代潮流,深入掌握AI技术的精髓,才能在激烈的市场竞争中独占鳌头。《AI产品经理手册》正是这样一部为AI产品经理量身定制的实战宝典,…...
ArcGIS 地理信息系统 任意文件读取漏洞复现
0x01 产品简介 ArcGIS是由美国Esri公司研发的地理信息系统(GIS)软件,它整合了数据库、软件工程、人工智能、网络技术、云计算等主流的IT技术,旨在为用户提供一套完整的、开放的企业级GIS解决方案,它包含了一套带有用户界面组件的Windows桌面应用。可以实现从简单到复杂的…...
11.07学习
一、三中代码解决鸡兔同笼问题 1.直接解方程 #include <stdio.h> int main() { int heads, feet, chickens, rabbits; printf("请输入总头数:"); scanf("%d", &heads); printf("请输入总脚数:"); scanf(…...
【JavaEE】常见锁策略、CAS
目录 常见的锁策略 乐观锁 vs 悲观锁 重量级锁 vs 轻量级锁 自锁锁和挂起等待锁 读写锁 可重入锁 vs 不可重入锁 公平锁 vs 非公平锁 CAS ABA问题 synchronized几个重要的机制 1、锁升级 2、锁消除 3、锁粗化 常见的锁策略 乐观锁 vs 悲观锁 乐观锁和悲观锁是锁的…...
Logstash 安装与部署(无坑版)
下载 版本对照关系:ElasticSearch 7.9.2 和 Logstash 7.9.2 ; 官方下载地址 选择ElasticSearch版本一致的Logstash版本 https://www.elastic.co/cn/downloads/logstash 下载链接:https://artifacts.elastic.co/downloads/logstash/logst…...
鸿蒙开发:ArkUI Toggle 组件
ArkUI提供了一套完整的UI开发工具集,帮助开发者高效完成页面的开发。它融合了语言、编译器、图形构建等关键的应用UI开发底座,为应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能以及实时界面预览工具等,可以支持…...
使用Matlab神经网络工具箱
综述 在大数据和人工智能时代,神经网络是一种最为常见的数据分析和拟合工具。本报告以常用分析软件Matlab为例,介绍其中神经网络工具箱使用方法。 Step 1: 打开matlab 安装matlab 2018以上版本后,双击图标打开。 Step 2: 打开神经网络拟合…...
【面试题】Hive 查询:如何查找用户连续三天登录的记录
1. 需求概述 在分析用户行为时,查询用户的连续登录数据是一个常见需求。例如,我们需要找出每个用户连续三天登录的记录。给定一个包含用户登录记录的表,我们需要对这些数据进行处理,提取出用户连续三天登录的日期。 2. 问题说明…...
高活跃社区 Doge 与零知识证明的强强联手,QED 重塑可扩展性
在 Web3 的广阔生态中,Doge 无疑是最具标志性和趣味性的项目之一。作为一种起源于网络文化的符号,Doge 从最初的互联网玩笑发展为如今备受全球关注的去中心化资产,依靠其独特的魅力和广泛的用户基础,构建了一个充满活力的社区。 …...
qt QAbstractTableModel详解
1、概述 QAbstractTableModel 是 Qt 框架中的一个类,用于在 Qt 应用程序中实现自定义的表格数据模型。它是 Qt 中的一个抽象基类,提供了创建和操作表格数据所需的接口。QAbstractTableModel 为模型提供了一个标准接口,这些模型将其数据表示为…...
掌握 Navicat 数据库结构设计 | 提升工作效率的秘诀
近期,我们介绍了 Navicat 17 的一系列的新特性,包括:兼容更多数据库、全新的模型设计、可视化 BI、智能数据分析、可视化查询解释、高质量数据字典、增强用户体验、扩展 MongoDB 功能、轻松固定查询结果、便捷 URI、支持更多平台等。今天&…...
Ollama AI 框架缺陷可能导致 DoS、模型盗窃和中毒
近日,东方联盟网络安全研究人员披露了 Ollama 人工智能 (AI) 框架中的六个安全漏洞,恶意行为者可能会利用这些漏洞执行各种操作,包括拒绝服务、模型中毒和模型盗窃。 知名网络安全专家、东方联盟创始人郭盛华表示:“总的来说&…...
vue 3:监听器
目录 1. 基本概念 2. 侦听数据源类型 1. 监听getter函数 2. 监听 ref 或 reactive 的引用 3. 多个来源组成的数组 4. 避免直接传递值!!! 3. 深层侦听器 4. 立即回调的侦听器 5. 一次性侦听器 6. watchEffect() 7. 暂停、恢复和停止…...
Java学习路线:Maven(四)Maven常用命令
在IDEA的Maven模块中,可以看到每个项目都有一个生命周期 这些生命周期实际上是Maven的一些插件,每个插件都有各自的功能,而双击这些插件就可以执行命令 这些命令的功能如下: clean:清除整个 target文件夹,…...
服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由4块SAS硬盘组建的RAID5阵列,上层安装linux操作系统统。分区结构:boot分区LVM卷swap分区(按照顺序),LVM卷中划分了一个reiserfs文件系统作为根分区。 服务器故障…...
lua入门教程:type函数
在Lua中,type 函数是一个内置函数,用于返回给定值的类型。Lua 支持多种数据类型,包括 nil(空值)、boolean(布尔值)、number(数字)、string(字符串)…...
Java图片转word
该方法可以控制一页是否只显示存放一张图片 第一步 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apache…...
ABAP 采购带组件收货BAPI
一、背景 有一项业务比较特殊,金靶的回收加工,既会有物料的消耗,也会收进上一批加工洗出来的物料,并且组件物料会带有批次,MIGO过账时需要填写批次,那么对应BAPI,也需要加入这一部分批次。如果…...
用Logisim从零搭建一个8位求补器:手把手教你理解补码的硬件实现
用Logisim从零搭建一个8位求补器:手把手教你理解补码的硬件实现 数字电路设计中最精妙的概念之一,莫过于补码表示法。它不仅解决了计算机中正负数的统一表示问题,还让加减法运算可以用同一套电路完成。但你是否好奇过,这个看似简单…...
8051单片机sbit位操作失效问题与volatile解决方案
1. 问题现象与背景解析在8051单片机开发中,我们经常需要对寄存器或内存中的特定位进行操作。Keil C51编译器提供了sbit关键字来实现位寻址功能,这是一种非常高效的位操作方式。但在实际开发中,不少工程师遇到过这样的困扰:明明在代…...
告别依赖冲突!用iframe集成file-viewer预览Word/PPT,Vue2项目也能轻松升级
告别依赖冲突!用iframe集成file-viewer预览Word/PPT,Vue2项目也能轻松升级 在Vue2项目中集成第三方文件预览组件时,开发者常常陷入依赖地狱——npm包版本冲突、构建体积膨胀、升级路径断裂等问题接踵而至。本文将揭示一种被低估的轻量级解决方…...
百考通:AI赋能期刊论文写作,智能生成优质内容
在学术研究领域,期刊论文的撰写是成果输出的关键环节,却也让众多科研工作者与学生倍感压力:选题迷茫、逻辑梳理困难、格式规范复杂、内容提炼耗时,严重拖慢了学术成果的发表节奏。百考通(https://www.baikaotongai.com…...
【STM32入门教程】将`printf`重定向到USART串口(以USB转串口为例)
【STM32入门教程】将printf重定向到USART串口(以USB转串口为例) 在STM32开发中,printf是一个非常方便的调试工具。但默认情况下,printf会输出到标准输出设备(如屏幕),而在嵌入式系统中ÿ…...
Perplexity症状查询功能性能对比白皮书:横向测试12家竞品,它在罕见病关键词召回率上领先41.6%,但时间敏感场景响应超时率达23.8%
更多请点击: https://intelliparadigm.com 第一章:Perplexity症状查询功能概览 Perplexity 是一款面向开发者与临床信息学研究人员设计的轻量级症状语义推理工具,其核心能力在于将自然语言描述的症状短语映射至标准化医学本体(如…...
如何快速掌握Switch文件管理神器:NSC_BUILDER完整新手指南
如何快速掌握Switch文件管理神器:NSC_BUILDER完整新手指南 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encr…...
高效精准的SacreBLEU实战指南:机器翻译评估的专业解决方案
高效精准的SacreBLEU实战指南:机器翻译评估的专业解决方案 【免费下载链接】sacrebleu Reference BLEU implementation that auto-downloads test sets and reports a version string to facilitate cross-lab comparisons 项目地址: https://gitcode.com/gh_mirr…...
UE5新手避坑指南:从导入FBX模型到材质贴图,搞定你的第一个Submarine Actor
UE5新手避坑实战:从模型导入到材质优化的全流程解决方案 当第一次打开虚幻引擎5的编辑器界面时,大多数初学者都会被其强大的功能和复杂的界面所震撼。作为次世代游戏开发的核心工具,UE5带来了Nanite虚拟几何体、Lumen全局光照等革命性技术&a…...
