c语言中“qsort函数”和“结构体成员访问变量”
qsort函数:
qsort是c语言中的库函数,这个函数是对数据进行排序(对任意)
冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据
排序算法
冒泡排序
插入
选择
快速
void qsort{
void * base; //base指向的排序数组的第一个元素的指针
size_t num; //base指向数组中元素的个数
size_t size; //base指向数组中一个元素的大小,单位是字节。
int (*cmp)(const void*,const void*);
};
排列浮点型数组,字符串,结构体:不同的是两个元素之间的比较方式不同。
两个字符串的比较大小不能使用> ,>=, <, <=, !=, ==,应该有strcmp。
strcmp函数不是比较字符串的长度,而是对应字符所占字节的大小。
//先测试qsort来排序整形
void test1(){
int arr[] = {1 2 4 6 7 8 9 43 }
int sz=sizeof(arr) / sizeof(arr[0]);
qsort (arr , sz , sizeof(arr[0]) , cmp_int);
print_arr();
}
对函数返回值有要求,比较两个p1,p2的整型
int cmp_int(const void*p1,const void *p2){
return *(int*)p1 - *(int*)p2; //直接比较两个整数的大小了
}
比较两个结构体:
张三 李四
20 35
185 170 是比较年龄还是身高呢?
qsort给了一个函数指针,来比较结构体。
//用test2来排序结构体数据
Struct Stu{
char name[20]; //名字是字符串
int age; //字符串比较用strcmp函数
}
//按照名字来比较
p1强制类型转换,才可以用。需要包含头文件#include<string.h>
void test2(){
struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr , sz , sizeof(arr[0]) , com_stu_by_name);
}
int cmp_stu_by_name(const void *p1,const void *p2){
return strcmp(((struct stu*)p1->name,((struct stu*)p2)->name);
}
//按照年龄进行访问
void test3(){
struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr , sz , sizeof(arr[0]) , com_stu_by_age);
}
int cmp_stu_by_age(const void *p1,const void *p2){
return strcmp(((struct stu*)p1->age,((struct stu*)p2)->age);
}
结构体成员访问变量
struct Stu{
char name[20];
int age;
}
int main(){
struct Stu s={"zhangsan",20};
printf("%s %d\n",s.name,s.age);
struct Stu *s=&s; // 结构体成员访问操作符:
printf("%s %d\n",(*ps).name,(*ps).age); // . :结构体变量 . 成员名
pritnf("%s %d\n",ps->name,ps->age); //->: 结构体指针->成员名
return 0;
}
相关文章:
c语言中“qsort函数”和“结构体成员访问变量”
qsort函数: qsort是c语言中的库函数,这个函数是对数据进行排序(对任意) 冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据 排序算法 冒泡排序 插入 选择 快速 void qsort{ void * base&…...
【MySQL】在MySQL中STR_TO_DATE()
1.在MySQL中STR_TO_DATE() 在MySQL中,STR_TO_DATE() 函数用于将字符串转换为日期格式。这个函数非常有用,当你需要将文本数据转换为可由MySQL日期和时间函数处理的格式时。 1.1 语法 STR_TO_DATE() 函数的基本语法如下: STR_TO_DATE(date…...

PCIE集成验证(五)MSI/MSI-X中断
PCI 总线最早采用的中断机制是 INTx,这是基于边带信号的。后续的 PCI/PCI-X版本,为了消除边带信号,降低系统的硬件设计复杂度,逐渐采用了 MSI(Message Signaled Interrupt)/MSI-X(消息信号中断)的中断机制。…...
leetcode 380.O(1) 时间插入、删除和获取随机元素
实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时࿰…...
基于MicroPython的ESP8266控制PS2摇杆模块的设计方案
以下是一个基于MicroPython的ESP8266控制PS2摇杆模块的设计方案: 一、硬件准备: 1. 一块ESP8266开发板,如NodeMCU 2. 一个带有X、Y轴模拟输出和Z轴(按钮)数字输出的PS2摇杆模块 3. 杜邦线若干 4. 3.3V直流电源 二、硬件连接:…...

Spring Boot 3项目使用Swagger3教程
Spring Boot 3项目使用Swagger3教程 Swagger:自动生成接口文档 添加依赖(pom.xml) <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.1…...
linux-系统备份与恢复-系统恢复
Linux 系统备份与恢复:系统恢复 1. 概述 Linux 系统的恢复是系统管理的重要组成部分,它指的是在系统崩溃、硬件故障、误操作或安全问题后,恢复系统到可用状态的过程。良好的系统恢复计划可以有效避免数据丢失和业务中断,并确保系…...
【Rust语言】std::collections::HashMap用法
HashMap用法文档 文章目录 创建键的要求 增删改查增: insert删: remove/remove_entry改单点修改 get_mut整体修改 values_mut/iter_mut 查集增改于一身的entry 遍历只读遍历into_values() 与 into_keys()容量、实际长度、判空导出清除重定容量 use std::collections::HashMap;创…...

使用SoapUI、Postman工具调用Webservice方法
SoapUI工具更适合调用Webservice使用。 1.使用SoapUI工具调用Webservice 创建“New SOAP Project” 自行定义一个项目名称,输入wsdl地址: 在左侧列表找到方法名,双击“Request 1”, 在请求数据中,添加对应的参数,然…...
js 与 C++引用和指针的关系
js 与 C引用和指针的关系 js 中既有引用的影子, 也有指针的影子。 1、引用用法 这里相当于C 中的引用, b是a的引用, 修改b ,a也改变。 var a { 1: 1 }var b a;a null;b[2] 2;console.error(b); // { 1: 1, 2: 2 }2、指针用法 这里 a,b应该按照指针理解。 var a undef…...

python --PyAibote自动化
官文: https://www.pyaibote.com/ 下载安卓集成环境: 可以看到开发的一些信息...
Ubuntu系统开发环境搭建
一,Android源码编译环境搭建 1 安装Java Development Kit (JDK) sudo apt-get update sudo apt-get install openjdk-8-jdk 2,确认JDK安装成功 java -version 3,安装编译所需的依赖项 sudo apt-get install git-core gnupg flex bison gperf build-essential zip cu…...

lvs-dr模式实验详解
华子目录 lvs-dr(企业当中最常用)dr模式数据逻辑dr模式数据传输过程dr模式的特点实验拓扑实验主机准备解决vip响应问题限制响应级别:arp_ignore限制通告级别:arp_announce 实验步骤1.client的ip设定2.router上的ip设定3.router开启路由转发功能4.lvs主机…...
【RDMA】mlxconfig修改和查询网卡(固件)配置--驱动工具
目录 简介 工具要求 语法 例子和参数 例子 更多参数 其他工具和查询 简介 mlxconfig 工具允许用户在不重新烧录固件的情况下更改某些设备配置。 配置在重启后仍然保留。 默认情况下,mlxconfig 显示将在下次启动时加载的配置。对于第五代设备,还…...

跨站请求伪造(CSRF)漏洞详解
免责申明 本文仅是用于学习检测自己搭建的DVWA靶场环境有关CSRF的原理和攻击实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《中华人民共和国网络安全法》及其所在国家地区相关法…...

Java+Spring Cloud +UniApp 智慧工地源码,用户PC端、移动端数据同步,支持多端展示
数字化给各行各业所带来的改变,在早些年间突出自动这一流程。但随着科技的发展,让人们也愈发了解可视化操作所带来的优势。智慧工地的诞生,相当于为建筑施工带来了一套较为完整的数字化流程,能够完善施工环节中的各部分内容。接下…...

【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社
探索RAG系统新高度:《大模型RAG实战:RAG原理、应用与系统构建》 随着大模型技术的爆发,尤其是ChatGPT之后,以ChatPDF为首的知识库问答产品迅速走红,引发了RAG(检索增强生成)系统的广泛关注与讨论…...

在Unity UI中实现UILineRenderer组件绘制线条
背景介绍 在Unity的UI系统中,绘制线条并不像在3D世界中那样直观(使用Unity自带的LineRender组件在UI中连线并不方便,它在三维中更合适)。没有内置的工具来处理这种需求。如果你希望在UI元素之间绘制连接线(例如在UI上连接不同的图标或控件)&a…...
C语言中union的用法
在C语言中,union(联合体)是一种特殊的复合数据类型,它允许多个不同的数据成员共享同一块内存空间。与struct(结构体)不同的是,union中的所有成员共用同一个内存地址,因此同时只能存储…...

C++速通LeetCode中等第18题-删除链表的倒数第N个结点(最简单含注释)
绝妙!快慢指针法,快指针先走n步(复杂度O(n),O(1)): /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(n…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...