自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 重生之从0开始学习c++之——vector-中篇

本文续上篇,详解 vector 的 resize、insert、erase 实现及常见坑点。resize 用于调整大小,不足时补默认值;insert 在指定位置插入元素,需处理扩容与数据迁移;erase 删除元素,通过前移后续元素实现,仅修改 _finish 指针。核心思想:size 由 _finish 决定,删除只需移动指针,无需真正释放内存。代码演示清晰,逻辑严谨,为理解 vector 拷贝控制奠定基础。

2026-11-10 17:56:11 249

原创 重生之从0开始学习c++之——vector-上篇

本文以命名空间 Confidence 模拟实现 C++ vector,通过三个指针(_start、_finish、_end_of_storage)管理内存,实现容量、访问、增删等核心功能。重点解析了为何用三指针而非两指针加整数,强调其高效性与状态一致性;并说明迭代器即裸指针,适用于连续内存容器。代码完整支持 push_back、pop_back、reserve 及遍历操作,为理解标准库实现提供清晰路径。

2026-11-03 08:02:36 288

原创 重生之从0开始学习c++之string(下)

本文以命名空间 Confidence 模拟实现 std::string,从构造、拷贝、析构到增删查改等接口逐一解析。重点讲解现代写法下拷贝构造与赋值运算符的优化:通过临时对象 + swap 实现资源高效转移,一次解决四类经典问题(自赋值、异常安全、效率、代码复用)。结合类内初始化与内存图示,揭示其低开销、高安全的底层逻辑,最终提供完整可运行代码与测试样例,深入浅出掌握现代 C++ 自定义类型核心设计思想。

2026-10-17 12:18:54 429 1

原创 源码解析——GPIOx与GPIO初始化

本文解析了STM32单片机中GPIO寄存器的本质与初始化过程。通过分析STM32F103ZET6的HAL库源码,揭示了GPIOx宏定义背后的寄存器地址映射原理:从PERIPH_BASE(0x40000000)开始,经过APB2总线偏移和端口偏移计算得到具体GPIO端口的基地址。重点阐释了(GPIO_TypeDef*)强制类型转换的意义,将物理地址转换为结构体指针,实现对寄存器组的结构化访问。文章还通过具体示例展示了如何计算GPIOF的基地址(0x40011C00),并验证了GPIO初始化源码中时钟使能、模式

2026-08-14 16:23:16 680 2

原创 重生之从0开始学习c++之string(上)

本文介绍了C++11中的两个重要语法特性:auto关键字和范围for循环。auto关键字允许编译器自动推导变量类型,简化了代码编写,但存在不能作为函数参数、不能声明数组等限制。范围for循环则提供了一种简洁的遍历容器方式,其底层实现基于迭代器操作,包括begin()、end()、!=比较、++前进和解引用等步骤。文章通过代码示例和汇编分析展示了这些特性的实际应用和底层原理,指出auto主要用于简化代码,而范围for循环本质上是传统迭代器操作的语法糖。这些特性在提升代码可读性的同时,仍保留了C++底层控制的灵

2026-04-24 16:12:51 564 1

原创 重生之从0开始学习c++之模板初级

本文介绍了C++中的泛型编程和函数模板。主要内容包括:1)通过交换函数案例说明模板的必要性,避免重复代码;2)函数模板的语法和原理,编译器会根据调用类型自动生成具体函数;3)模板实例化的两种方式:隐式实例化(自动推导)和显式实例化(强制指定类型);4)模板与非模板函数的匹配规则,非模板函数优先匹配。函数模板实现了代码复用,提高了编程效率,是C++泛型编程的核心技术。

2026-04-17 17:41:34 399

原创 重生之从0开始学习c++之内存管理

文章摘要: C/C++程序内存分为栈、堆、数据段、代码段等区域,各区域存储不同类型的数据。栈用于局部变量和函数调用,堆用于动态内存分配,数据段存放全局和静态变量,代码段存储可执行指令和常量。动态内存管理方面,C使用malloc/calloc/realloc分配堆内存,需手动管理;C++引入new/delete操作符,不仅分配内存还会自动调用构造函数/析构函数,更适合面向对象编程。new/delete将内存分配与对象生命周期管理结合,比malloc/free更安全高效,特别是对于自定义类型。正确理解内存分区和

2026-04-15 16:32:50 453

原创 重生之从0开始学习c++之类与对象(下)

正常情况:类的 private 成员只能被本类的成员函数访问,外部函数不能触碰。class A {private:// 编译错误:无法访问 private 成员友元的作用:给某个外部函数或类发一张 “VIP 通行证”,允许它访问自己的私有成员。class A {// 声明 func 是 A 的友元private:// 可以访问了!在类内部用 friend 关键字声明。友元声明不是成员函数声明,它只是告诉编译器“这个函数/类可以访问我的私有成员”。

2026-04-14 18:05:02 731

原创 重生之从0开始学习c++之类与对象(中)

本文介绍了C++类中的默认成员函数,重点分析了构造函数和析构函数的特性与使用场景。构造函数用于对象初始化,具有自动调用、可重载等特点,编译器会生成默认构造函数但对内置类型不做初始化;析构函数负责资源清理,对象销毁时自动调用,对于资源管理类必须自定义析构函数。文章通过代码示例展示了默认构造函数的调用规则、无参构造与全缺省构造的冲突,以及析构函数在资源释放中的关键作用,强调了自定义构造/析构函数在资源管理中的必要性。

2026-04-10 18:21:03 615 4

原创 重生之从0开始学习c++之——类与对象(上)

本文介绍了C++中类的定义与实例化相关内容。首先讲解了类的基本定义格式,包括成员变量和成员函数的声明方式,以及访问限定符(public/private/protected)的作用。其次详细说明了类实例化的概念,指出类实例化出对象时才会分配物理内存空间。最后分析了对象大小的计算规则,说明对象只存储成员变量且需遵循内存对齐原则。文章通过代码示例展示了类的定义、成员函数实现、访问控制以及实例化过程,帮助理解C++面向对象编程的基本概念。

2026-04-02 17:40:07 550

原创 重生之从0基础开始学习c++之——c++入门开篇

本文介绍了C++编程入门的基础知识,包括"Hello World"程序的实现、命名空间的概念与使用、C++输入输出方法以及缺省参数的用法。主要内容如下: C++版本的"Hello World"程序示例,展示了与C语言的不同之处; 命名空间(namespace)的作用及定义方法,解决了命名冲突问题; C++的输入输出流(cin/cout)的使用方式及其优势; 缺省参数的概念,包括全缺省和半缺省参数的语法规则。 文章通过代码示例详细说明了这些基础特性的使用方法,为C++初

2026-04-01 15:35:24 501

原创 归并排序算法

归并排序是一种分治算法,通过递归将数组不断二分至单个元素后回溯合并。核心步骤是分解和合并:分解将数组拆分为子数组,合并则将两个有序子数组合并为一个有序数组。递归版本使用临时数组存储合并结果,避免覆盖原数据。非递归版本通过迭代控制子数组大小gap,从1开始逐步翻倍合并相邻子数组,直到整个数组有序。两种方式时间复杂度均为O(nlogn),但递归版本需要额外栈空间,非递归版本更节省内存。关键点在于正确设置临时数组索引和合并时的边界条件。

2026-03-26 16:52:30 509 2

原创 交换排序算法

本文介绍了两种排序算法:冒泡排序和快速排序。冒泡排序通过相邻元素比较交换,每轮将最大元素"冒泡"到末尾,并设置标志位优化已排序情况。快速排序采用分治策略,通过选取基准值将数组分为两部分递归排序。文中详细分析了快速排序的初始实现存在的最坏时间复杂度问题和栈溢出风险,并给出了优化方案:1)三数取中选择基准值避免最坏情况;2)小规模数据改用插入排序;3)非递归实现。两种算法均配有完整C代码实现和详细执行过程分析。

2026-03-24 19:24:45 519 1

原创 选择排序算法

本文详细介绍了两种排序算法:直接选择排序和堆排序。直接选择排序通过每次找出最小值和最大值并交换到两端实现排序,时间复杂度为O(n²),文中特别强调了处理最大值在起始位置的特殊情况。堆排序部分详细解析了建堆和排序过程,通过调整堆结构实现排序,包括具体的节点调整步骤和交换操作。两种算法均附有代码实现和关键细节说明,堆排序部分还配有详细的示例图解,帮助理解排序过程。

2026-03-22 17:13:53 574 1

原创 插入排序算法

本文介绍了两种排序算法:直接插入排序和希尔排序。直接插入排序时间复杂度为O(n²),通过类似整理扑克牌的方式逐步构建有序序列。希尔排序是插入排序的改进版,时间复杂度约为O(n^1.3),采用"缩小增量"策略先进行预排序使数组基本有序,最后执行插入排序。文章详细讲解了两者的实现原理、代码实现和优化方法,包括分组处理与交替处理的区别,以及增量序列的选择。通过代码示例和变量解释,帮助读者深入理解这两种排序算法的工作原理和实现细节。

2026-03-21 10:57:10 627 1

原创 数据结构初阶之二叉树收尾

本文介绍了二叉树的层序遍历(广度优先遍历)及其应用。层序遍历通过队列实现,按从上到下、从左到右的顺序访问节点。基于层序遍历,可以判断完全二叉树:遇到第一个空节点后,检查队列中剩余节点是否全为空。文章还总结了二叉树的性质(如n0=n2+1)并通过多个选择题进行了验证。此外,通过实例演示了如何根据前序/中序/后序遍历序列重建二叉树结构。这些内容涵盖了二叉树的基本遍历方法和重要性质,是理解二叉树操作的基础。

2026-03-18 19:35:50 552 2

原创 数据结构之二叉树算法题

本文介绍了二叉树相关的几个算法问题及解决方案: 查找第k层节点个数:通过递归逐层下降,当k=1时计数当前节点,否则递归计算左右子树的k-1层节点数之和。 查找值为x的节点:递归遍历时正确处理返回值是关键,需要先检查当前节点,再递归查找左右子树,确保结果正确传递。 单值二叉树判断:检查当前节点与左右子节点值是否相同,并递归验证左右子树是否都为单值树。 判断两棵树是否相同:比较节点值和结构,递归检查左右子树是否相同。 对称二叉树判断:通过镜像比较,验证左子树的左节点与右子树的右节点是否对称。 这些算法都采用递归

2026-03-17 21:08:17 782

原创 数据结构之实现链式结构二叉树

本文介绍了二叉树的基本实现与遍历方法。首先定义了二叉树节点结构体BTNode,包含左右子节点指针和数据域。通过BTBuy函数动态创建节点,CreateTree函数构建示例二叉树。重点讲解了三种递归遍历方式:前序(根-左-右)、中序(左-根-右)和后序(左-右-根)遍历,并分析了递归调用过程。在计算节点个数时,指出了局部变量size在递归中存在的问题,建议使用静态变量或全局变量解决。文章通过图示和代码示例,清晰展示了二叉树的构建和遍历过程,为后续二叉树操作打下基础。

2026-03-16 18:46:38 577

原创 数据结构初阶——二叉树之——堆的实现

本文实现了一个基于数组的最小堆数据结构。关键功能包括:初始化堆(HPInit)、销毁堆(HPDestroy)、插入元素(HPPush)和删除堆顶(HPPop)。插入时通过AdjustUp保持堆性质,删除时通过AdjustDown调整。堆排序(HeapSort)功能通过建堆和反复删除堆顶实现。代码采用动态内存管理,支持自动扩容,包含完整错误检查机制。测试用例展示了堆的基本操作和排序功能。

2026-03-13 18:56:34 672

原创 在线OJ之用队列实现栈及设计循环队列

本文介绍如何使用两个队列实现栈的功能。核心思路是利用队列的先进先出特性,通过元素转移操作模拟栈的后进先出。主要操作包括:入栈时直接插入非空队列;出栈时将非空队列除最后一个元素外全部转移到空队列,再弹出最后一个元素;取栈顶直接返回队尾元素。代码实现了队列的基本操作和基于队列的栈结构,包括初始化、入栈、出栈、获取栈顶和判空等功能。这种实现方式虽然时间复杂度较高(出栈操作O(n)),但展示了数据结构间的巧妙转换。

2026-03-11 17:14:48 495 4

原创 数据结构之队列的实现

本文介绍了队列的基本操作实现,包括初始化、销毁、插入、删除等核心功能。通过定义Queue结构体存储头尾指针和队列大小,简化了指针操作。重点讲解了插入(QueuePush)和删除(QueuePop)的实现细节:插入需处理空队列和非空队列两种情况,删除需注意释放内存并更新头指针。同时提供了获取队头队尾元素(QueueFront/QueueBack)、获取队列大小(QueueSize)和判空(QueueEmpty)等辅助功能。所有操作都包含必要的断言检查,确保程序的健壮性。

2026-03-10 18:37:43 249 1

原创 数据结构之栈的实现

本文详细介绍了栈的实现方法及其应用。首先通过C语言实现了栈的基本操作,包括初始化、销毁、入栈、出栈、取栈顶元素、判空和获取元素个数等函数。接着展示了栈在解决"有效的括号"问题中的应用,利用栈的后进先出特性来匹配括号。文章提供了完整的代码实现和详细的解题思路,最后强调遍历结束后需要检查栈是否为空来判断所有括号是否匹配正确。

2026-03-09 19:30:54 631

原创 环形链表问题与随机链表的复制oj复盘

本文讨论了两种链表相关算法问题:环形链表检测与随机链表复制。对于环形链表,使用快慢指针法可以高效检测环的存在并找到环的入口点,通过数学推导证明了该方法的正确性。随机链表复制问题则采用了一种巧妙的三步法:先在原节点后插入复制节点,然后设置random指针,最后分离新旧链表。这种方法利用原链表的next指针建立映射关系,确保random指针能正确指向复制节点。两种算法都展示了指针操作在解决链表问题中的强大能力,体现了空间复杂度和时间复杂度的优化思想。

2026-03-08 14:04:01 650

原创 数据结构之单链表OJ复盘

本文介绍了三个链表相关算法问题的解决方案: 移除链表元素:通过创建虚拟头节点(dummy node)统一处理头节点可能被删除的情况。使用双指针遍历链表,当遇到目标值时修改指针关系并释放节点内存,最后返回处理后的链表头。 反转链表: 迭代法:使用三个指针(prev, curr, next)逐步反转链表节点指向 头插法:通过不断将原链表节点插入新链表头部实现反转 链表的中间节点: 常规方法:先遍历计算链表长度,再遍历到中间位置 快慢指针法:使用快慢指针同时遍历,快指针到达末尾时慢指针正好在中间 每个解决方案都配

2026-03-07 12:55:52 623

原创 数据结构之算法复杂度

本文介绍了时间复杂度和空间复杂度的计算方法,重点讲解了大O渐进表示法的推导规则:保留最高阶项、去除常数系数、用1代替常数项。通过多个代码示例(如嵌套循环、递归等)演示了不同算法的时间复杂度分析(O(N^2)、O(N)、O(1)、O(logN)等)。空间复杂度部分强调了函数栈帧和额外空间的影响,示例展示了O(1)和O(N)的情况。最后以数组旋转问题为例,对比了三种解法的时间复杂度:暴力法O(N^2)、辅助数组法O(N)和三次逆置法O(1)。文章强调复杂度分析的核心是比较算法增长量级,而非精确计算执行次数。

2026-03-04 17:36:26 605 1

原创 c语言之题目篇复盘

本文解析了多个C语言编程问题,涉及无符号数循环、字符处理、位运算、结构体对齐、递归函数等知识点。重点分析了无符号字符类型在循环中的回绕特性、结构体在不同对齐方式下的内存布局、位操作对特定bit位的清零方法等典型问题。通过逐题解析,展示了C语言中数据类型转换、内存管理、运算符优先级等核心概念的应用场景,并提供了详细的解题思路和计算过程。

2026-03-03 18:43:41 909 4

原创 数据结构初阶之单链表

本文介绍了单链表的基本实现和核心操作函数。单链表节点由数据域(data)和指针域(next)组成,通过指针连接形成链式结构。文章详细讲解了单链表的打印、尾插等基础操作,重点分析了为什么尾插操作需要传递二级指针:当需要修改链表头指针时(如空链表插入),必须通过二级指针来改变原指针的值。通过内存结构图示和代码示例,清晰展示了指针操作的本质,帮助理解链表操作中指针传递的关键作用。

2025-12-29 16:02:42 983 1

原创 数据结构初阶之通讯录项目

摘要 本文实现了一个基于动态顺序表的通讯录管理系统,主要包含以下功能: 数据结构设计:使用结构体peoInfo存储联系人信息(姓名、性别、年龄、电话、地址),并通过动态顺序表SeqList实现数据存储管理。 核心功能实现: 通讯录初始化与销毁 联系人添加、删除、修改功能 联系人查找与展示功能 动态扩容机制(使用realloc实现) 技术特点: 采用模块化设计,分为Contact和SeqList两个模块 实现动态内存管理,支持自动扩容 提供基于姓名的联系人查找功能 该系统通过顺序表实现了联系人数据的高效管理,

2025-12-18 18:48:53 424 1

原创 数据结构初阶入门之顺序表

本文介绍了数据结构中顺序表的相关知识,重点讲解了动态顺序表的实现与应用。主要内容包括: 顺序表的基本概念:线性表的一种实现方式,分为静态和动态两种类型 动态顺序表的实现:使用结构体管理数组指针、大小和容量,提供扩容机制 核心操作函数:包括初始化、检查扩容、尾插/头插、尾删/头删等操作的实现原理 项目结构设计:采用模块化编程思想,将声明、实现和测试分离到不同文件 动态顺序表相比静态顺序表具有更好的灵活性,能根据需要动态调整大小,避免了空间浪费或不足的问题。文章通过代码示例详细展示了各函数的实现逻辑,包括扩容策

2025-12-09 19:49:45 1022 5

原创 初学者小白复盘24之——动态内存管理

本文介绍了C语言动态内存分配机制,重点讲解了malloc、calloc、realloc和free函数的使用方法。动态内存分配允许程序在运行时申请所需大小的内存空间,相比静态分配更加灵活。文章详细说明了每个函数的特点、正确使用方式及常见错误,包括必须检查返回值、避免内存泄漏和野指针、正确释放内存等关键点。同时指出了常见的动态内存错误,如NULL指针解引用、越界访问、错误释放非动态内存等,并给出了相应的正确做法。通过本文可以全面了解C语言动态内存管理的核心概念和最佳实践。

2025-11-26 15:27:42 958 2

原创 初学者小白复盘23之——联合与枚举

联合体(union)是一种特殊的数据类型,其所有成员共享同一块内存空间。联合体的大小由最大成员决定,同时要考虑内存对齐规则。通过地址验证和内存修改实验,可以直观展示联合体的内存共享特性。与结构体相比,联合体能节省内存空间,但同一时间只能存储一个成员的值。联合体在实际应用中常用于存储互斥的多种数据类型,如商品属性管理。此外,联合体还能巧妙用于判断系统字节序(大小端模式),通过将int和char类型共享内存,读取首字节即可判断存储方式。这种特性使联合体成为处理类型转换和内存优化的有力工具。

2025-11-21 16:17:47 1050 3

原创 初学者小白复盘22之——结构体

本文详细介绍了C语言结构体的相关概念和使用方法。主要内容包括:1. 结构体类型的声明与初始化,包括常规声明、变量初始化和特殊的匿名结构体声明;2. 结构体的自引用方式,解释了正确的指针引用方法和常见错误;3. 结构体内存对齐规则,通过示例说明对齐计算方法,并分析了对齐原因及节省空间的技巧。文章强调结构体是组织复杂数据的有效方式,合理使用可以提升程序性能,但需要注意内存对齐带来的空间开销问题。

2025-11-19 15:54:03 932 3

原创 初学者小白复盘21之——数据在内存中的存储(下)

摘要: 本文通过代码示例分析了浮点数在内存中的存储原理。当整数9被强制转换为浮点数时,根据IEEE 754标准,其二进制序列被解析为符号位S=0、指数E全0、尾数M=1.001×2^(-146),导致输出0.000000。而浮点数9.0存储时,按科学计数法分解为S=0、M=001、E=130(3+127),其二进制形式转换为十进制得到1091567616。这说明浮点数的存储采用(-1)^S×M×2^E的形式,通过特定规则处理符号位、指数和尾数,导致与整数存储方式的显著差异。

2025-11-16 19:46:15 1044 1

原创 初学者小白复盘20之——数据在内存中的存储(上)

文章摘要: 本文主要讲解计算机系统中整数的存储方式和大小端字节序问题。整数在内存中以补码形式存储,便于统一处理符号位和数值运算。大小端模式决定了多字节数据的存储顺序:大端模式将高位字节存于低地址,小端模式反之。通过代码示例展示了如何判断当前机器的字节序,并分析了多个涉及char类型变量赋值的练习题目,揭示了数据截断、整数提升等底层机制对程序行为的影响。这些概念对理解计算机底层数据存储和处理具有重要意义。

2025-11-13 17:00:15 1343 1

原创 初学者小白复盘19之——内存函数

本文介绍了memcpy和memmove两个内存操作函数的使用及模拟实现。memcpy用于非重叠内存的拷贝,可以处理任意数据类型,其核心实现是将源数据按字节逐个复制到目标位置。memmove则在memcpy基础上增加了处理内存重叠的能力,通过判断目标位置是否在源数据范围内,决定从前向后或从后向前拷贝以避免数据覆盖。文章通过具体代码示例展示了两个函数的模拟实现过程,并分析了在处理重叠内存时需要采用不同拷贝方向的原因。这两个函数都接收void*类型参数以支持任意数据类型,使用时需注意目标内存空间的合法性。

2025-11-10 21:10:11 1195 1

原创 初学者小白复盘18之——字符函数与字符串函数

本文介绍了C语言中字符处理相关函数的使用和实现方法。主要包括三类内容: 字符分类函数(ctype.h):如isalpha、isdigit等用于判断字符类型的函数,以及字符转换函数tolower/toupper的使用示例。 strlen函数:详细讲解了strlen的功能特点(返回'\0'前的字符个数),并通过三种方式模拟实现(计数器法、递归法和指针相减法)。 strcpy函数:分析了其参数设计原理,并给出了一个完整的模拟实现代码,重点包括指针操作、断言检查和const修饰符的使用技巧。所有示例代码均经过验证,

2025-11-02 15:01:28 1175 1

原创 初学者小白复盘17之指针(5)下部分

这篇文章分析了C语言中指针与数组运算的几个关键案例,主要包含三部分内容: 字符数组与指针测试: 展示了字符数组在不同指针运算下的strlen表现,重点指出直接传递字符值给strlen会导致程序崩溃 分析了指针变量在sizeof运算中的行为,说明指针类型在不同运算中的大小差异 二维数组测试: 详细解析了二维数组在sizeof运算中表现的特殊性 说明数组名在不同上下文中的含义变化(整个数组vs首元素地址) 特别指出sizeof(a[3])这种越界访问在编译期处理的特性 指针运算题目: 通过具体案例(&a

2025-10-29 14:46:31 1073 3

原创 初学者小白复盘16之指针(5)——上部分

摘要:本文详细解析了C语言中sizeof和strlen的区别及数组指针相关问题。通过代码示例说明: sizeof是编译时操作符,计算数据内存占用,不执行表达式;strlen是运行时函数,计算字符串长度直到遇到'\0' 数组名在不同场景下的行为差异:单独sizeof(数组名)计算整个数组大小,其他情况退化为指针 指针运算的差异:&arr+1跳过整个数组,而arr+1只跳过一个元素 字符数组的陷阱:没有'\0'的数组用strlen会得到随机值,传递非指针参数会导致程序崩溃 通过多个示例展示了32位和64

2025-10-25 18:48:50 938 1

原创 初学者小白复盘16之指针(5)——预告

这篇文章展示了多个C语言代码片段,主要演示了sizeof运算符、指针运算、数组和字符串处理的相关概念。内容包括:基本数据类型的大小计算、字符数组与字符串的区别、指针运算对sizeof结果的影响、多维数组的内存布局、结构体指针运算等。每个代码片段都通过printf输出结果,帮助理解变量在内存中的表示方式以及不同类型指针运算的效果。这些代码示例涵盖了C语言中常见的内存操作和指针用法,适合用来测试对sizeof和指针的理解程度。

2025-10-24 17:05:51 165 2

原创 初学者小白复盘15之指针(4)

本文介绍了三种计算器实现方法(switch语句、函数指针数组和回调函数)以及冒泡排序优化和qsort函数的使用。主要内容包括: 通过switch实现基础计算器功能,分析其代码冗余问题; 使用函数指针数组(转移表)优化计算器,简化代码结构; 利用回调函数机制进一步改进计算器实现; 冒泡排序算法的基本实现及优化(通过标志位减少无效循环); qsort函数的标准用法,包括参数说明和实际应用。 文章通过具体代码示例展示了每种方法的实现细节,重点比较了不同实现方式的优缺点,特别强调了函数指针在实际编程中的灵活应用。

2025-10-23 17:56:35 926 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除