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

C语言基本知识------指针(4)

1. 回调函数是什么?

  回调函数就是⼀个通过函数指针调用的函数。

如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。


void qsort(void base,//指针,指向第一个待排序数组的第一个元素size_t num,//是base指向排序数组的元素个数,size_t size,//base指向的待排序数组元素的大小int (*copare)(cosnt void *cosnt void *,) ;//函数指针---指向的就是两个元素的比较函数 
实现这个函数如下面代码:
#include <stdio.h>
#include <tdilib.h>
void parr(int arr[], int sz)
{for (int i = 0;i < sz;i++){primntf("%d ",arr[i]);}
}
int cmpm_it(const void *p1,const void *p2)
{return *(int*)p1-*(int*)p2;
}
int main()
{int arr[] = {9,5,2,4,6,4,8,1};int sz=sizeof(arr) / sizeof(arr[0]);qsort(arr,sz,sizof(arr[0],cmpm_it);parr(arr,sz);return 0;
}

2.qsort排序结构体/整型数据:

#include <stdio.h>
#include <stdlib.h>
struct stu
{char name[20];int age;
};
void parr(int arr[], int sz)
{for (int i = 0;i < sz;i++){primntf("%d ", arr[i]);}
}
//结构体大小用名字大小比较
int cmpm_it_name(const void* p1, const void* p2)
{return strcmp(((struct stu*)p1)->name,((struct stu*)p2)->name);
}
//结构体大小用年龄大小比较
int cmpm_it_name(const void* p1, const void* p2)
{return (((struct stu*)p1)->age, ((struct stu*)p2)->age);
}
int main()
{struct stu arr[] = {"zhansn",15,"李四",16};int sz = sizoef(arr) / sizeof(arr[0]);qsort(arr, sz, sizof(arr[0]), cmpm_it_name);parr(arr, sz);return 0;
}

3.模拟qsort实现:

#include<stdio.h>
int int_cmp(const void * p1, const void * p2)
{return (*( int *)p1 - *(int *) p2);
}
void _swap(void *p1, void * p2, int size)
{int i = 0;for (i = 0; i< size; i++){char tmp = *((char *)p1 + i);*(( char *)p1 + i) = *((char *) p2 + i);*(( char *)p2 + i) = tmp;}
}
void bubble(void *base,//指向第一个元素指针int count , //元素个数int size,//一个元素大小个数int(*cmp )(void *, void *))//两个元素比较函数
{int i = 0;int j = 0;for (i = 0; i< count - 1; i++){for (j = 0; j<count-i-1; j++){if (cmp ((char *) base + j*size , (char *)base + (j + 1)*size) > 0){_swap(( char *)base + j*size, (char *)base + (j + 1)*size, size);}}}
}
int main()
{int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i = 0;bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++){printf( "%d ", arr[i]);}printf("\n");return 0;
}

4.sizeof和strlen

1.1 sizeof

我们学习了 sizeof sizeof 计算变量所占内存内存空间⼤⼩的,单位是 字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。

sizeof 只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据。

#inculde <stdio.h>
int main()
{int a = 10;printf("%d\n", sizeof(a));printf("%d\n", sizeof a);printf("%d\n", sizeof(int));return 0;
}

1.2 strlen

strlen 是C语⾔库函数,功能是求字符串⻓度。函数原型如下:
1 size_t strlen ( const char * str );
统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。
strlen 函数会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找。

1.3 sizeof 和 strlen的对比

相关文章:

C语言基本知识------指针(4)

1. 回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被⽤来调⽤其所指向的函数 时&#xff0c;被调⽤的函数就是回调函数。 void qsort(void base,//指针…...

【OMCI实践】ONT上线过程的omci消息(六)

引言 在前四篇文章中&#xff0c;主要介绍了ONT上线过程的OMCI交互的第一、二、三个阶段omci消息&#xff0c;本篇介绍第四个阶段&#xff0c;OLT下发配置到ONT。前三个阶段&#xff0c;每个厂商OLT和ONT都遵循相同标准&#xff0c;OMCI的交换过程大同小异。但第四个阶段&…...

C语言(13)------------>do-while循环

1.do-while循环的语法 我们知道C语言有三大结构&#xff0c;顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考&#xff1a; C语言&#xff08;11&#xff09;-------------&#xff1e;while循…...

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…...

HybridCLR+Adressable+Springboot热更

本文章会手把手教大家如何搭建HybridCLRAdressableSpringboot热更。 创作不易&#xff0c;动动发财的小手点个赞。 安装华佗 首先我们按照官网的快速上手指南搭建一个简易的项目&#xff1a; 快速上手 | HybridCLR 注意在热更的代码里添加程序集。把用到的工具放到程序集里…...

电脑连接示波器显示波形

通过网线连接示波器和电脑&#xff0c;将示波器波形显示在电脑上直接复制图片至报告中&#xff0c;以下是配置步骤。 一、设备 网线&#xff0c;Tektronix示波器&#xff0c;电脑 二、使用步骤 1.用网线连接电脑和示波器 2.电脑关掉WiFi&#xff0c;查看IPv4网关地址&#xf…...

监听其他音频播放时暂停正在播放的音频

要实现当有其他音频播放时暂停当前音频&#xff0c;你可以使用全局事件总线或 Vuex 来管理音频播放状态。这里我将展示如何使用一个简单的事件总线来实现这个功能。 首先&#xff0c;你需要创建一个事件总线。你可以在项目的一个公共文件中创建它&#xff0c;例如 eventBus.js…...

小熊猫C++安装EasyX最新教程

1.下载EasyX 官网下载&#xff1a; EasyX 官网https://easyx.cn/ 2.将下载文件改格式解压 注意&#xff1a;下载文件为.exe格式&#xff0c;需将其格式改成.zip格式&#xff01; 如何改格式&#xff1f; a.若文件名字未显示.exe (1).打开此电脑 (2).点击上端的查看 (…...

安装VM和Centos

安装VM 一、打开虚拟机 二、选择典型 三、选择光盘 四、指定虚拟机位置 五、设置磁盘大小并拆分为多个文件 六、完成 安装Centos 一、上述过程完成后我们直接打开虚拟机 二、语言选择中文 三、默认安装位置并点击完成 四、点击开始安装 五、点击设置密码 设置完密码后点击完成…...

git 命令 设置别名

在Git中&#xff0c;您可以通过以下命令查看所有的alias&#xff08;别名&#xff09;&#xff1a; git config --get-regexp alias 这个命令会列出所有配置的alias&#xff0c;例如&#xff1a; alias.st.status alias.co.checkout alias.br.branch ... 如果您想查看某个特定a…...

React + TypeScript 全栈开发最佳实践

React TypeScript 全栈开发最佳实践 一、环境搭建与项目初始化 node.js和npm的安装请参考我的文章。 1.1 脚手架选择与工程创建 # 使用Vite 5.x创建ReactTS项目&#xff08;2025年主流方案&#xff09; npx create-vitelatest my-app --template react-ts cd my-app npm in…...

springboot志同道合交友网站设计与实现(代码+数据库+LW)

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本志同道合交友网站就是在这样的大环境下诞生&#xff0c;其可以帮助使用者在短时间内处理完毕庞大的数据信…...

防火墙双机热备---VRRP,VGMP,HRP(超详细)

双机热备技术-----VRRP&#xff0c;VGMP&#xff0c;HRP三个组成 注&#xff1a;与路由器VRRP有所不同&#xff0c;路由器是通过控制开销值控制数据包流通方向 防火墙双机热备&#xff1a; 1.主备备份模式 双机热备最大的特点就是防火墙提供了一条专门的备份通道&#xff08;心…...

MQTT实现智能家居------4、在Linux上运行MQTT

进入主目录&#xff0c;创建一个MQTT文件夹 cd ~ mkdir MQTT 用FileZilla连接开发板&#xff0c;将我发布的压缩包解压以后放进MQTT 安装cmake sudo apt-get install cmake g编译 & 运行 echo sudo apt-get update >> build.sh #向build.sh文件写入内容 chmod…...

VMware建立linux虚拟机

本文适用于初学者&#xff0c;帮助初学者学习如何创建虚拟机&#xff0c;了解在创建过程中各个选项的含义。 环境如下&#xff1a; CentOS版本&#xff1a; CentOS 7.9&#xff08;2009&#xff09; 软件&#xff1a; VMware Workstation 17 Pro 17.5.0 build-22583795 1.配…...

大模型文集开篇稿

2023年&#xff0c;我国AI大模型行业规模已达到147亿元人民币&#xff08;前瞻产业研究院 数据&#xff09;。AI大模型的行业应用及技术进步能有效提升各行业生产要素的产出效率并提高了数据要素在生产要素组合中的地位。供给方面&#xff0c;当前AI大模型企业主要通过深化通用…...

python pickle模块

pickle 是 Python 的一个标准模块&#xff0c;它实现了基本的二进制协议&#xff0c;用于对象的序列化和反序列化。序列化是指将对象转换为字节流的过程&#xff0c;这样对象就可以被保存到文件中或通过网络传输。反序列化是指将字节流转换回对象的过程。 使用 pickle 序列化对…...

第16届蓝桥杯模拟赛3 python组个人题解

第16届蓝桥杯模拟赛3 python组 思路和答案不保证正确 1.填空 如果一个数 p 是个质数&#xff0c;同时又是整数 a 的约数&#xff0c;则 p 称为 a 的一个质因数。 请问&#xff0c; 2024 的最大的质因数是多少&#xff1f; 因为是填空题&#xff0c;所以直接枚举2023~2 &am…...

企业知识管理战略整合新路径

跨部门知识协同机制 现代企业知识管理的核心挑战在于突破组织孤岛效应&#xff0c;跨部门知识协同机制的构建需依托结构化流程与智能化工具的融合。通过建立标准化知识元数据体系&#xff0c;企业可实现文档分类、版本控制及权限管理的统一规范&#xff0c;其中Baklib作为云端…...

GO 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version [rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …...

青岛地区门窗家具行业数字化转型指南:用友畅捷通好业财系统深度解析与本地化落地推荐

在2025—2026年&#xff0c;青岛地区门窗家具行业正经历前所未有的竞争压力与转型升级阵痛。据青岛市建材行业协会最新调研数据显示&#xff0c;超过68%的本地门窗制造及家具经销企业面临成本上升、利润压缩、管理粗放等多重挑战。与此同时&#xff0c;国家对中小企业财税合规监…...

嵌入式开发找50W+工作必备的技能栈

嵌入式系统开发是一项横跨硬件、软件、通信和行业规范的综合性工程。一名合格的嵌入式工程师&#xff0c;不仅需要扎实的底层编程能力&#xff0c;还要理解电子电路、实时操作系统以及各种工业通信协议&#xff0c;甚至需要熟悉特定领域的功能安全标准。下面&#xff0c;我们系…...

百元级专业无人机开发:ESP-Drone如何用开源方案突破技术壁垒

百元级专业无人机开发&#xff1a;ESP-Drone如何用开源方案突破技术壁垒 【免费下载链接】esp-drone Mini Drone/Quadcopter Firmware for ESP32 and ESP32-S Series SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-drone 在无人机技术快速发展的今天&…...

蓝桥杯STM32G431RBT6开发板:从CubeMX配置到Keil5工程搭建全流程(避坑指南)

蓝桥杯STM32G431RBT6开发实战&#xff1a;从CubeMX配置到Keil5工程深度解析 第一次接触蓝桥杯嵌入式赛道的同学&#xff0c;往往会在开发环境搭建阶段遇到各种"玄学问题"——时钟配置报错、代码无法下载、工程文件莫名丢失。这些问题看似简单&#xff0c;却可能让新手…...

VideoDownloadHelper视频下载助手:如何轻松保存网页视频的完整指南

VideoDownloadHelper视频下载助手&#xff1a;如何轻松保存网页视频的完整指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经遇到…...

从Word2Vec到Attention:用‘讲故事’的方式,轻松理解NLP核心模型演进史

从Word2Vec到Attention&#xff1a;用故事串联NLP模型演进之路 想象一下&#xff0c;你正在教一个刚学会认字的孩子理解"国王-男人女人≈女王"这样的词语关系。这看似简单的语言游戏背后&#xff0c;隐藏着自然语言处理(NLP)技术数十年的智慧结晶。让我们穿越时空&am…...

springboot基于SpringBoot的艺术作品展示平台_z50di044_zl085

前言 在数字化浪潮推动下&#xff0c;艺术作品的传播与展示方式正经历深刻变革。传统艺术展览受限于场地、时间和地域&#xff0c;难以满足广大艺术爱好者和创作者的需求。基于SpringBoot的艺术作品展示平台旨在打破这些限制&#xff0c;构建一个集作品展示、交流互动、艺术教育…...

AIAgent追踪性能暴跌87%?立即启用这5个轻量级Trace增强探针(已通过LLM-Ops生产环境压测验证)

第一章&#xff1a;AIAgent架构全链路追踪方案 2026奇点智能技术大会(https://ml-summit.org) 在复杂AIAgent系统中&#xff0c;任务常跨多个模块&#xff08;如规划器、工具调用器、记忆检索器、LLM执行器&#xff09;动态流转&#xff0c;传统日志或单点埋点难以还原端到端行…...

X-AnyLabeling3.2实战:从零部署到自定义模型自动标注

1. X-AnyLabeling3.2安装与环境配置 第一次接触X-AnyLabeling这个开源标注工具时&#xff0c;我就被它的自动标注功能吸引了。相比传统的手动标注&#xff0c;它能节省80%以上的时间。不过安装过程确实有些坑要避开&#xff0c;这里分享我的实战经验。 首先需要准备Anaconda环境…...

Win7系统WebP图片预览插件安装与使用指南

1. 为什么Win7需要WebP预览插件 如果你还在使用Windows 7系统&#xff0c;可能会发现一个尴尬的问题&#xff1a;当你在资源管理器里浏览图片时&#xff0c;那些WebP格式的图片要么显示为空白图标&#xff0c;要么根本无法预览。这不是你的系统出了问题&#xff0c;而是因为微软…...