自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 vector 的基本使用(大小、容量和位置)的详细阐述(上)

从C数组过渡到vector,真正需要改变的不是下标写法,而是对元素数量、预留容量和位置有效性的理解。本文沿用基础测试,逐步讲清构造、访问、遍历、增删查改和二维数据,并用图表说明扩容与迭代器失效,把接口记忆变成可靠的使用习惯。

2026-10-04 12:07:27 326

原创 学会使用 std::string 类,并理解其内部是如何管理字符串的详细阐述(下)

从 C 字符数组走向 C++ 的 string ,关键不只是少写几个字符串函数,而是理解字符、长度、容量和资源所有权怎样协同工作。本篇先用简单示例讲清构造、输入、遍历、修改、查找和C接口衔接,再通过简化实现串起扩容、深拷贝与拷贝交换,配合着练习,帮助我们深度理解其底层基本实现原理,形成可验证的习惯

2026-10-03 11:09:46 498 1

原创 学会使用std::string类,并理解其内部是如何管理字符串的详细阐述(上)

从 C 字符数组走向 C++ 的 string ,关键不只是少写几个字符串函数,而是理解字符、长度、容量和资源所有权怎样协同工作。本篇先用简单示例讲清构造、输入、遍历、修改、查找和C接口衔接,再通过简化实现串起扩容、深拷贝与拷贝交换,配合着练习,帮助我们深度理解其底层基本实现原理,形成可验证的习惯

2026-10-02 11:07:31 501 1

原创 从 malloc/free 到 new/delete:真正理解 C++ 中的内存管理与对象生命周期

本篇从 C 的内存分区与动态分配出发,用“存储空间”和“对象生命周期”两条线索理解 C++ 内存管理。通过内置类型和简单类,简单理解清楚 new、delete、数组形式与 operator new 的职责,以及构造、析构和释放的顺序。

2026-09-29 19:27:22 762

原创 把C++类包装成真正可用的对象:运算符重载、const、静态成员

类能正确构造、析构和拷贝后,还要自然参与表达式。本篇从日期比较、加减和自增出发,解释运算符重载、成员与非成员函数、前置与后置 ++,再串联 const、静态成员、友元、类型转换与 explicit 的概念与使用。

2026-09-27 15:59:08 914

原创 C++对象的出生与消失:搞懂构造函数、析构函数、初始化列表与拷贝构造

对象不是定义后再随意填数据的内存空间,而应从诞生起处于可用状态。本篇沿着生命周期讲清构造函数、初始化列表、成员对象顺序、析构函数、拷贝构造和赋值运算符。通过 const和引用,说明初始化列表为何必要、浅拷贝为何会重复释放,并用流程和表格区分新对象初始化与已有对象赋值。

2026-09-27 11:07:38 737

原创 从结构体到对象:正式学习C++类的骨架、封装与this指针

本文从 C 结构体和函数出发,建立 C++ 类与对象模型,从而加深理解成员变量、成员函数、访问限定符、对象大小和 this 指针解决的问题。

2026-09-26 15:29:47 666

原创 从C语言走进C++:先基本看懂命名空间、输入输出、重载与引用

面向基本学习C语言后,进而迈入C++学习的读者,本文从一个可运行程序出发,解释命名空间、iostream 输入输出、默认参数、函数重载、引用、inline 和 nullptr。说明这些语法为什么出现、如何运行,以及与 C 写法的对应关系,并用练习巩固指针、生命周期和调用歧义等边界

2026-09-22 20:21:47 810

原创 常见排序算法(下):快速、归并与计数排序

上篇从局部有序、选择极值和相邻交换认识了基础排序,本篇继续进入分治与非比较思路。文章用完整过程图拆解快速排序的枢轴选择、三种分区、递归和显式栈,解释递归与非递归归并的拆合边界,再从映射、值域、空间和稳定性讲透计数排序。

2026-09-20 15:46:43 855

原创 常见排序算法(上):选择排序、直接插入、希尔排序 (冒泡,堆)

排序不只是把数字从小到大排列,更是在时间、空间、稳定性和数据特征之间做选择。本文从排序的基本概念与公平测试方法出发,依次拆解直接插入、希尔、选择、堆和冒泡排序;通过逐步图解、动画、关键 C 代码与性能实验,说明元素如何移动、算法为什么正确,以及初学者最容易写错的边界。

2026-09-20 14:05:28 729

原创 二叉树链式结构的实现:真正理解递归遍历与创建

上一篇借助堆认识了完全二叉树的层序数组。本篇转向更灵活的链式二叉树,补充度、叶子和高度等性质;以同一棵树逐步演示前序、中序、后序遍历,以及递归统计节点、叶子和第 k 层节点的过程;最后解析 `#` 空节点前序建树、销毁和两道 LeetCode 递归题,为后续学习二叉树的更多操作打下基础。

2026-09-17 15:20:56 946

原创 从树的层次关系到堆的调整算法:二叉树开篇

树用于表达文件目录等层次关系。本文解释节点、根、父子、叶子、度、深度和高度,梳理二叉树的形态、性质与存储。随后说明堆的逻辑树与连续数组,演示向上调整、向下调整、建堆和堆排序,并补充复杂度、TOP-K、易错点和练习。

2026-09-14 23:30:45 1008

原创 队列:排队规则、先进先出

队列的重点不只是“先进先出”,还在于如何让队头删除和队尾添加都保持高效。本文先用现实排队建立 FIFO 模型,再拆解链队列中节点、front、rear、size 的职责,结合C语言推演入队、出队和最后一个节点的边界处理。

2026-09-13 12:11:24 892

原创 栈为何“后进先出”:从访问顺序理解 C 语言动态顺序栈

栈不是“只能存几个数的数组”,而是一种限制访问方向的数据结构。本文先从撤销操作和函数调用理解后进先出,再用内存示意图建立栈顶、栈底、元素数量与容量的模型,最后对照动态顺序栈代码推演初始化、扩容、入栈、出栈和销毁,并通过复杂度分析与练习巩固边界处理。

2026-09-12 17:54:19 837

原创 带哨兵的双向循环链表:双向连接、循环与统一边界

双向循环链表让节点同时保存前驱和后继,既能向前也能向后遍历;再加入一个不存用户数据的哨兵节点,就能把空表、首节点和尾节点统一为相同的局部连接关系。本章从单链表的限制推导普通双向链表、循环和哨兵的必要性,给出 C 语言初始化、插入、删除、查找、销毁的实现,并比较它与顺序表、单链表的适用场景。

2026-09-10 23:17:16 836

原创 单链表:节点、指针连接与基本操作

单链表用节点保存数据,并用 next 指针表达元素的前后关系。节点不必连续,因此在已知位置附近插入或删除时不需要搬移整段数据;代价是不能按下标直接跳转,查找和定位通常需要逐个遍历。

2026-09-09 15:45:16 1574

原创 顺序表:线性表的连续存储、动态扩容与基本操作

顺序表是线性表最直接的实现:把逻辑上相邻的元素放进一段连续内存,因此可以按下标快速访问;代价是中间插入和删除必须移动元素。本章从线性表关系出发,比较静态与动态顺序表,推导扩容、插入、删除和查找的 C 实现,并说明每个操作的复杂度、位置约定与常见边界错误。

2026-09-08 23:29:25 837

原创 从“能运行”到“跑得稳”:用C语言读懂数据结构复杂度

复杂度关注的不是某台电脑跑了几秒,而是输入规模变大时,算法需要增加多少操作和额外内存。本文从数组求和出发,用 Big O 理解 `O(1)`、`O(log n)`、`O(n)`、`O(n²)` 等趋势,结合 C 代码分析循环、二分查找、递归、栈空间和数据结构操作,并通过练习避开常数、步长和嵌套关系的误区。

2026-09-07 23:18:46 1068

原创 C语言控制台贪吃蛇游戏(下)

本文继续分析这款 C 语言控制台贪吃蛇如何在主循环中轮询按键、控制速度和暂停,并把一次移动拆成“计算下一格、判断食物、头插节点、删除尾巴、检查碰撞”。

2026-09-06 15:17:23 1236

原创 C语言控制台贪吃蛇游戏(上)

从一个真实的 C 语言控制台贪吃蛇项目出发,本文先建立“字符坐标画面”的思维模型,再用源码讲解 Win32 控制台常用接口、宽字符和本地化、蛇身单链表、地图边界、初始化及随机食物生成。

2026-09-05 23:12:57 791

原创 C语言编译与链接介绍:从源文件到可执行程序的完整过程

从 hello.c 到可执行程序,中间经历了哪些步骤?本文按预处理、编译、汇编、链接和运行的顺序,解释每个阶段的输入、输出与职责,并用 gcc 命令、短代码和典型报错展示如何定位问题。

2026-09-01 10:38:14 1359

原创 C语言基本文件操作

程序一结束,普通变量就会消失;文件却能把数据保存下来。本文从文件指针和 fopen、fclose 讲起,按“打开—顺序读写—随机定位—判断结束—刷新缓冲区”的顺序,逐个介绍 fgetc、fputs、fprint、fwrite、fseek等常用函数。每个函数都有短小示例、预期结果和失败处理,并穿插文本/二进制选择、EOF 误用、容量检查等容易踩的坑。

2026-08-31 12:33:03 1080

原创 C语言结构体

本文从并行数组的错位问题出发,建立结构体的类型与对象模型,讲清定义、初始化、成员访问、字符串成员,还有编译器为何插入填充,数组元素为何需要尾部空白,成员重排怎样节省空间。使用偏移和内存格图推导 sizeof ,并简要介绍浅拷贝/深拷贝的基本区别

2026-08-31 12:29:35 1158

原创 整数与浮点数在内存中的存储:从二进制补码到IEEE754标准

变量放入内存后并不会带着“整数”或“浮点数”的标签,那里只有一串位。本篇从位、字节、十六进制讲起,逐步解释无符号数、补码、字节序和 IEEE 754 浮点数如何解释同一类位模式,重点演示十进制与 binary32 位模式的手算转换、舍入和反向还原。

2026-08-30 15:01:24 901

原创 C 语言常见内存操作函数: memcpy、memmove、memset、memcmp

字符串函数依靠 '\0' 判断结束,但内存操作函数只认地址和字节数。本文循序讲解 了memcpy、memmove、memset和memcmp 的基本用法、参数、返回值、执行过程与边界;重点解释重叠区域、容量计算、结构体填充和 memset 填充值等容易误解的地方,并给出简短模拟实现。

2026-08-29 12:57:25 817

原创 C 语言常见字符串函数:从 strlen 到 strtok 掌握字符串处理

C 语言字符串是以 '\0' 结尾的字符数组。本文介绍 strlen、strcpy、strcat、strcmp、strstr、strtok 等常用函数,说明参数、返回值、执行过程与边界,并给出模拟实现、安全拼接写法和练习。

2026-08-27 19:17:31 946

原创 C语言指针(三)-- 二级指针与函数指针

一级指针可以通过地址修改一个变量,那么函数要怎样修改调用者手中“指针变量本身”的指向?函数名也能作为地址使用时,int (*operation)(int, int) 又到底在描述什么?本文先用二级指针解决“改指向”的真实需求,再从普通函数出发,逐步拆开函数指针的声明、赋值、调用、类型别名、回调函数和函数指针数组。

2026-08-26 13:33:21 974

原创 C语言指针(二)-- 一维、二维数组与指针的关系

数组不是指针,但数组名在大多数表达式中会转换为首元素地址。本文从 `arr[i]` 的定位过程开始,解释一维数组传参为什么必须额外传长度,并进一步区分字符数组、字符串字面量、指针数组和数组指针。

2026-08-25 12:21:04 977

原创 C语言指针(一)-- 从内存地址开始理解指针

指针难,并不是因为 `*` 这个符号难记,而是它把变量、内存地址、数据类型和对象生命周期连在了一起。本文从一个普通整数变量出发,逐步观察地址怎样被取得、保存和再次访问;再解释指针类型、解引用、`const`、指针运算,以及空指针、野指针和悬空指针的区别。

2026-08-24 15:06:49 1114

原创 基于C 语言一步步写出简易控制台扫雷游戏

本文以一个控制台扫雷项目为主线,从创建工程开始,完成棋盘设计、随机布雷、数字统计、标记、递归展开和胜负判断。文中解释每个函数的作用、两张棋盘的分工、数组边界的设计,并示范如何分阶段编译和测试、定位错误。最后补充 `main.c`、`game.c`、`game.h` 的分文件协作。

2026-08-23 19:35:44 845

原创 C 语言函数和数组

函数可为任务命名,实现代码复用;数组则支持批量传递同类型数据,便于统一处理。但数组传入函数时存在关键特性:数组名会退化为首地址,其长度信息无法一同传入,函数无法自动获知数组有效长度。因此在开发中,通常需要额外传入长度参数,保障遍历与读写安全。理解这一规则,是掌握数组传参、指针相关逻辑的基础,也能规避越界访问等常见程序错误。

2026-08-21 15:05:52 875

原创 C 语言分支与循环语句

本文系统讲述了 if、switch、while、do...while 和 for 等分支与循环语句的作用、语法和执行流程。通过可运行代码、流程图和综合案例,帮助读者理解条件判断、循环边界、break 与 continue 的使用。

2026-08-18 17:44:59 1048

空空如也

空空如也

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

TA关注的人

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