当前位置: 首页 > news >正文

深入学习指针(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.回调函数是什么&#xff1f;2.qsort使用举例2.1使用qsort函数排序整形数据2.2使用sqort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递…...

离散无记忆信道

目录 离散无记忆信道输入概率输出概率联合分布概率信道逆向概率一些记号示例1示例2 离散无记忆信道 离散&#xff1a;输入输出字母表都是有限的 无记忆&#xff1a;输出字符 d i d_i di​ 被接收到的概率只依赖于当前的输入 c i c_i ci​, 而与前面的输入无关。 一个离散无记…...

【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)

本篇文章分享关于如何使用STM32单片机对彩色摄像头&#xff08;OV7725/OV2604&#xff09;采集的图像数据进行分析处理&#xff0c;最后实现颜色的识别和检测。 目录 一、什么是颜色识别 1、图像采集识别的一些基本概念 1. 像素&#xff08;Pixel&#xff09; 2. 分辨率&am…...

《AI产品经理手册》——解锁AI时代的商业密钥

在当今这个日新月异的AI时代&#xff0c;每一位产品经理都面临着前所未有的挑战与机遇&#xff0c;唯有紧跟时代潮流&#xff0c;深入掌握AI技术的精髓&#xff0c;才能在激烈的市场竞争中独占鳌头。《AI产品经理手册》正是这样一部为AI产品经理量身定制的实战宝典&#xff0c;…...

ArcGIS 地理信息系统 任意文件读取漏洞复现

0x01 产品简介 ArcGIS是由美国Esri公司研发的地理信息系统(GIS)软件,它整合了数据库、软件工程、人工智能、网络技术、云计算等主流的IT技术,旨在为用户提供一套完整的、开放的企业级GIS解决方案,它包含了一套带有用户界面组件的Windows桌面应用。可以实现从简单到复杂的…...

11.07学习

一、三中代码解决鸡兔同笼问题 1.直接解方程 #include <stdio.h> int main() { int heads, feet, chickens, rabbits; printf("请输入总头数&#xff1a;"); scanf("%d", &heads); printf("请输入总脚数&#xff1a;"); scanf(…...

【JavaEE】常见锁策略、CAS

目录 常见的锁策略 乐观锁 vs 悲观锁 重量级锁 vs 轻量级锁 自锁锁和挂起等待锁 读写锁 可重入锁 vs 不可重入锁 公平锁 vs 非公平锁 CAS ABA问题 synchronized几个重要的机制 1、锁升级 2、锁消除 3、锁粗化 常见的锁策略 乐观锁 vs 悲观锁 乐观锁和悲观锁是锁的…...

Logstash 安装与部署(无坑版)

下载 版本对照关系&#xff1a;ElasticSearch 7.9.2 和 Logstash 7.9.2 &#xff1b; 官方下载地址 选择ElasticSearch版本一致的Logstash版本 https://www.elastic.co/cn/downloads/logstash 下载链接&#xff1a;https://artifacts.elastic.co/downloads/logstash/logst…...

鸿蒙开发:ArkUI Toggle 组件

ArkUI提供了一套完整的UI开发工具集&#xff0c;帮助开发者高效完成页面的开发。它融合了语言、编译器、图形构建等关键的应用UI开发底座&#xff0c;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能以及实时界面预览工具等&#xff0c;可以支持…...

使用Matlab神经网络工具箱

综述 在大数据和人工智能时代&#xff0c;神经网络是一种最为常见的数据分析和拟合工具。本报告以常用分析软件Matlab为例&#xff0c;介绍其中神经网络工具箱使用方法。 Step 1: 打开matlab 安装matlab 2018以上版本后&#xff0c;双击图标打开。 Step 2: 打开神经网络拟合…...

【面试题】Hive 查询:如何查找用户连续三天登录的记录

1. 需求概述 在分析用户行为时&#xff0c;查询用户的连续登录数据是一个常见需求。例如&#xff0c;我们需要找出每个用户连续三天登录的记录。给定一个包含用户登录记录的表&#xff0c;我们需要对这些数据进行处理&#xff0c;提取出用户连续三天登录的日期。 2. 问题说明…...

高活跃社区 Doge 与零知识证明的强强联手,QED 重塑可扩展性

在 Web3 的广阔生态中&#xff0c;Doge 无疑是最具标志性和趣味性的项目之一。作为一种起源于网络文化的符号&#xff0c;Doge 从最初的互联网玩笑发展为如今备受全球关注的去中心化资产&#xff0c;依靠其独特的魅力和广泛的用户基础&#xff0c;构建了一个充满活力的社区。 …...

qt QAbstractTableModel详解

1、概述 QAbstractTableModel 是 Qt 框架中的一个类&#xff0c;用于在 Qt 应用程序中实现自定义的表格数据模型。它是 Qt 中的一个抽象基类&#xff0c;提供了创建和操作表格数据所需的接口。QAbstractTableModel 为模型提供了一个标准接口&#xff0c;这些模型将其数据表示为…...

掌握 Navicat 数据库结构设计 | 提升工作效率的秘诀

近期&#xff0c;我们介绍了 Navicat 17 的一系列的新特性&#xff0c;包括&#xff1a;兼容更多数据库、全新的模型设计、可视化 BI、智能数据分析、可视化查询解释、高质量数据字典、增强用户体验、扩展 MongoDB 功能、轻松固定查询结果、便捷 URI、支持更多平台等。今天&…...

Ollama AI 框架缺陷可能导致 DoS、模型盗窃和中毒

近日&#xff0c;东方联盟网络安全研究人员披露了 Ollama 人工智能 (AI) 框架中的六个安全漏洞&#xff0c;恶意行为者可能会利用这些漏洞执行各种操作&#xff0c;包括拒绝服务、模型中毒和模型盗窃。 知名网络安全专家、东方联盟创始人郭盛华表示&#xff1a;“总的来说&…...

vue 3:监听器

目录 1. 基本概念 2. 侦听数据源类型 1. 监听getter函数 2. 监听 ref 或 reactive 的引用 3. 多个来源组成的数组 4. 避免直接传递值&#xff01;&#xff01;&#xff01; 3. 深层侦听器 4. 立即回调的侦听器 5. 一次性侦听器 6. watchEffect() 7. 暂停、恢复和停止…...

Java学习路线:Maven(四)Maven常用命令

在IDEA的Maven模块中&#xff0c;可以看到每个项目都有一个生命周期 这些生命周期实际上是Maven的一些插件&#xff0c;每个插件都有各自的功能&#xff0c;而双击这些插件就可以执行命令 这些命令的功能如下&#xff1a; clean&#xff1a;清除整个 target文件夹&#xff0c…...

服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器中有一组由4块SAS硬盘组建的RAID5阵列&#xff0c;上层安装linux操作系统统。分区结构&#xff1a;boot分区LVM卷swap分区&#xff08;按照顺序&#xff09;&#xff0c;LVM卷中划分了一个reiserfs文件系统作为根分区。 服务器故障…...

lua入门教程:type函数

在Lua中&#xff0c;type 函数是一个内置函数&#xff0c;用于返回给定值的类型。Lua 支持多种数据类型&#xff0c;包括 nil&#xff08;空值&#xff09;、boolean&#xff08;布尔值&#xff09;、number&#xff08;数字&#xff09;、string&#xff08;字符串&#xff09…...

Java图片转word

该方法可以控制一页是否只显示存放一张图片 第一步 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apache…...

6 鸿蒙应用启动速度优化全流程拆解 | 鸿蒙开发筑基实战

6 鸿蒙应用启动速度优化全流程拆解 | 鸿蒙开发筑基实战 作者&#xff1a;杨建宾&#xff08;华夏之光永存&#xff09; 摘要 本文面向鸿蒙应用开发工程师&#xff0c;聚焦应用启动慢、首屏白屏等核心痛点&#xff0c;拆解从代码配置到资源处理的全流程优化方案。内容包含启动流…...

什么是模型存储

模型存储的理解 模型存储是指将训练好的机器学习模型保存到磁盘&#xff0c;以便后续直接使用而无需重新训练。 为什么需要模型存储&#xff1f; # 没有模型存储&#xff1a;每次使用都要重新训练 model train_model(data) # 可能需要几小时 prediction model.predict(ne…...

Phi-3-mini-4k-instruct-gguf惊艳效果:中文长难句拆解+逻辑关系标注+通俗转述三重能力展示

Phi-3-mini-4k-instruct-gguf惊艳效果&#xff1a;中文长难句拆解逻辑关系标注通俗转述三重能力展示 1. 模型能力概览 Phi-3-mini-4k-instruct-gguf作为微软Phi-3系列的轻量级文本生成模型&#xff0c;在中文处理方面展现出令人惊喜的能力。这个开箱即用的模型特别擅长处理三…...

Vodafone K4606 USB调制解调器Linux内核驱动适配

1. Vodafone USB Modem 驱动适配技术解析&#xff1a;K4606 型号的底层支持实现 1.1 项目背景与工程定位 VodafoneUSBModem 是一个面向嵌入式 Linux 系统的 USB 串行通信驱动增强项目&#xff0c;其核心目标并非开发全新协议栈&#xff0c;而是对上游 Linux 内核中已有的 op…...

LABVIEW写入Excel的函数:应用程序目录、创建路径、写入带分隔符电子表格、for循环、条件结构、按名称解除捆绑、创建数组

...

10分钟零成本搭建KIMI AI免费API:个人智能助手完整指南

10分钟零成本搭建KIMI AI免费API&#xff1a;个人智能助手完整指南 【免费下载链接】kimi-free-api &#x1f680; KIMI AI 长文本大模型逆向API【特长&#xff1a;长文本解读整理】&#xff0c;支持高速流式输出、智能体对话、联网搜索、探索版、K1思考模型、长文档解读、图像…...

引爆企业降本增效的AI革命!生成式AI应用专家亲授,从字节跳动到华为的数字化转型实战秘籍!

本文介绍了资深AI专家Mr. Li在生成式AI应用与数字化转型领域的丰富经验&#xff0c;涵盖其在华为、字节跳动等企业的实践经历&#xff0c;以及在多个国家级标准制定和央企数字化转型项目中的参与。Mr. Li提供了一系列关于生成式AI和企业数字化转型的精品课程&#xff0c;旨在帮…...

TM1620驱动数码管的8个常见坑点及解决方案(基于STM32实战)

TM1620驱动数码管的8个常见坑点及解决方案&#xff08;基于STM32实战&#xff09; 当你在STM32项目中使用TM1620驱动数码管时&#xff0c;可能会遇到各种令人头疼的问题。本文将深入探讨8个最常见的坑点&#xff0c;并提供经过实战验证的解决方案&#xff0c;帮助开发者快速定位…...

中文NLP入门首选:bert-base-chinese预训练模型快速部署指南

中文NLP入门首选&#xff1a;bert-base-chinese预训练模型快速部署指南 1. 为什么选择bert-base-chinese模型 如果你刚开始接触中文自然语言处理&#xff0c;bert-base-chinese绝对是最佳起点。这个由Google发布的预训练模型&#xff0c;已经成为中文NLP领域的"瑞士军刀…...

VRCT:打破VRChat语言壁垒的实时翻译与转录工具

VRCT&#xff1a;打破VRChat语言壁垒的实时翻译与转录工具 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台VRChat中&#xff0c;语言差异常常成为跨文化交流的主…...