自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 命令行参数、环境变量与进程地址空间

本文深入解析了C语言程序中main函数的三个参数——argc、argv与env,揭示命令行参数与环境变量在内存中的布局机制。通过execve系统调用,shell将参数和环境变量以字符串数组形式拷贝至新进程的栈区,由启动代码传递给main。文中还详解了PATH环境变量的作用及命令查找流程,并展示了参数与环境变量在内存中“倒序排列、指针指向”的统一存储结构,揭示了看似独立的三者实为同一内存区域的不同视图。

2026-11-02 12:43:08 645 29

原创 Linux 进程——从 PCB 到僵尸进程

从冯诺依曼体系讲到 PCB 与 task_struct, Linux 进程是什么、fork 怎么创建进程、进程有哪几种状态,以及僵尸进程和孤儿进程的成因与区别

2026-10-24 19:16:01 569 31

原创 map 和 set 的使用,与 AVL 树的实现:二叉树的旋转,左右单转,双旋,退化情况,时间复杂度

map 和 set 用起来省事,坑也不少:insert 的返回值、operator[] 的插入语义、erase 的三种重载,先把这些接口理清楚。后半篇从二叉搜索树的退化讲到 AVL 树,按先搭插入框架、再补四种旋转的顺序,讲平衡因子、单旋与双旋

2026-10-23 19:41:52 323 21

原创 二叉搜索树——从插入查到key-value改写

二叉搜索树又叫二叉排序树,左子树小于根、右子树大于根。本文从插入、查找讲到删除的四种情况,重点讲清替换法删除里 rightMinP 初值这个坑;再对比 key 与 key/value 两种场景,说明为什么 key/value 版的 Find 必须返回结点指针、替换法为什么必须连 value 一起换。最后看有序插入退化成单支树的代价,为 AVL 与红黑树做铺垫。

2026-10-18 17:22:27 401 22

原创 多态全解——虚函数、重写、虚表与多态原理

多态的构成条件、虚函数重写里的四个坑、重载重写隐藏的区别、纯虚函数与抽象类,最后拆到虚表——对象里多出来的那个指针、运行时怎么查表、动态绑定和静态绑定的汇编对比

2026-10-16 21:59:53 786 24

原创 USART 概念篇——从高低电平到数据帧

串口怎么把一个字节发给另一台芯片?这篇从最底层的电平讲起:串行与并行、同步与异步的分界线、单工半双工全双工;波特率与比特率是什么关系(扔个球就懂);帧格式五段各管什么,0x55 的 11 位帧逐位走一遍;再拆开 USART 黑盒:TDR/RDR、移位寄存器、TXE/TC/RXNE 三个标志位,最后落到 HAL 收发函数的阻塞语义与 STM32 五个串口的总线归属。

2026-10-07 20:22:12 464 9

原创 STM32 时钟树实操与 SystemClock_Config 源码解析

SystemClock_Config 一直是 CubeMX 代填的黑盒?这篇亲手配一次:用 CPU_Delay 死循环当频率探针,从默认 HSI 8MHz 到 HSE+PLL 倍频 72MHz,再改一行分频让灯的快慢肉眼可见。HAL 源码四层拆到寄存器位,还有 FLASH 等待周期按 SYSCLK 划档、APB1 上限 36MHz 这些容易想岔的边界

2026-10-04 14:21:45 304 4

原创 RCC 概念篇——单片机的心跳从哪来

STM32 的 72 MHz 从哪来?从一颗 8 MHz 晶振出发,经 PLL 九倍频、AHB/APB 多级分频,再由一排使能开关分发到每个外设。这篇概念篇不碰代码,把时钟树从树根讲到树叶:四个时钟源怎么选、定时器为什么拿到双倍频率、USB 的 48 MHz 怎么除出来、HSE 挂了 CSS 怎么救场。

2026-09-29 13:29:49 448 3

原创 GPIO 输入与按键检测

GPIO 的输入方向怎么用?这篇从板子上的四个按键出发:先看原理图里的上拉电阻和并联电容,再搞清抖动是怎么产生的、施密特触发器为什么救不了它;然后按「外部缺哪一半、内部补哪一半」把四种输入模式的选法理出来,最后拆开 HAL_GPIO_ReadPin 看它到底读了哪个寄存器,并给出三个版本的按键检测代码与消抖处理。

2026-09-29 13:24:23 342 1

原创 GPIO 输出与 HAL 源码解析

GPIO_PIN_8 为什么是 0x0100、GPIOF 背后压着什么地址、写 BSRR 为什么不用先读再改、CubeMX 生成的配置怎么落进 CRL/CRH 的四个位。位运算的巧妙,在寄存器操作里看得最清楚

2026-09-20 18:56:48 341 4

原创 STM32F103ZET6 封装、引脚与开发环境

上一篇把 STM32F103ZET6 的型号含义逐字拆开了,这篇接着认识芯片本身:LQFP144 封装到底长什么样、144 个引脚从哪里开始数、PA0 和 VDD 这些名字分别代表什么、哪些引脚接错了芯片就跑不起来,以及从封装、引脚一路到 Keil 开发环境和 DAP 烧录的完整流程。

2026-09-15 22:23:19 282 1

原创 STM32入门概念篇——从嵌入式、MCU到命名规则与开发环境

本文从嵌入式系统切入,解析MCU(单片机)的核心概念,厘清嵌入式与通用计算机的差异,重点介绍STM32系列芯片的定位与架构。文章梳理了ARM、意法半导体与STM32之间的授权与生产关系,详解了型号命名规则,并规划后续以STM32为平台开展嵌入式开发实践,开启软硬结合的学习之旅。

2026-09-15 22:12:24 327 3

原创 继承全解——继承、默认成员函数、切片、隐藏与虚继承

继承是 C++ 面向对象里最容易"以为会了"的部分。这篇把继承整个串一遍:切片、隐藏规则和两道选择题、派生类六大默认成员函数、多继承与菱形/虚继承、指针偏移陷阱,还有友元和静态成员。每处坑都配图讲清,是《类和对象全解》的自然衔接

2026-09-10 22:15:04 329 3

原创 C++模板进阶——特化全解

模板进阶:通用模板比较 Date 对象没问题,换成 Date* 指针就变成比地址?从 const 在 * 两侧到底锁谁说起,拆解函数模板特化与推荐重载,再到类模板全特化与偏特化的优先级,以及偏特化里 const 和引用被结构模式"吸收"的坑。末尾带一页非类型模板参数与分离编译。

2026-09-06 22:31:28 329 8

原创 C++容器适配器详解——stack、queue、priority_queue与堆的模拟实现

本文从 stack、queue 和 priority_queue 的使用出发,观察 STL 源码中的容器适配器设计,进一步通过仿函数实现可切换的比较规则,并图解 priority_queue 的向上调整、向下调整和自定义类型比较,完成简化版模拟实现。

2026-09-05 19:25:47 366 6

原创 迭代器与模板的结合——stl的list

上一篇模拟了 vector,这一篇来啃 STL 的 list。它底层是带头结点的双向循环链表,最大的难点在迭代器——vector 的迭代器是裸指针,可 list 节点不连续,it++ 走不动,必须把迭代器封装成类。本文从「为什么不能直接用指针」讲起,一步步把普通/const 迭代器合并成类模板,还把各类迭代器的层级关系梳理清楚,最后用表格对比 list 与 vector 的底层结构、插删效率、迭代器失效和使用场景。

2026-09-05 09:26:51 363 6

原创 从C语言快速转向py——第一课

本文介绍了Python与C语言的主要区别,包括变量无需声明类型、整数除法保留小数、语句无需分号、字符串操作更简便、布尔类型明确、输入输出方式不同、支持连续比较和多元赋值、代码块使用缩进而非大括号、pass语句作用、range函数迭代、三元表达式写法差异、函数定义使用def关键字、参数传递方式(位置参数和关键字参数)、支持缺省参数值以及函数可返回多个值等特性,帮助有C语言基础的读者快速入门Python。

2026-07-27 16:53:19 255 1

原创 迭代器失效探究之vector详解——vector对于野指针的检查

本文介绍了C++中vector容器的基本使用、迭代器失效问题及模拟实现。首先讲解了vector的定义方式、迭代器使用(包括正向和反向迭代器)以及扩容机制(reserve和resize的区别)。重点分析了迭代器失效的两种情况:扩容导致的野指针问题和删除元素导致的越界问题,强调修改容器后必须更新迭代器。通过杨辉三角示例展示了vector的二维应用。最后探讨了vector的底层实现思想,指出SGI STL库通过三个迭代器成员(start/finish/end_of_storage)来管理容器,不同于传统的指针+s

2026-07-23 18:45:52 171 7

原创 C++string库介绍以及常见功能模拟实现

这篇C++ String库介绍文档涵盖了从基础语法到底层模拟实现的完整知识体系。内容包含auto关键字、范围for、迭代器等前置知识,详细解析了String的构造、容量管理、增删查改等核心功能,并结合LeetCode真题讲解实战应用。文档重点在于模拟实现String类,深入探讨了深浅拷贝、SSO优化及GCC与MSVC底层差异,是掌握C++字符串原理与STL源码的优质教程。

2026-06-04 13:43:04 399 5

原创 C++内存管理和模板初阶

本文介绍了C++中的内存管理和模板初阶知识。主要内容包括: C++内存管理方式 使用new关键字替代C语言的malloc/calloc/realloc 使用delete关键字替代C语言的free new会自动调用构造函数,delete会自动调用析构函数 对比了C++和C语言内存管理方式的区别 operator new和operator delete函数 底层实现原理 与malloc/free的关系 常见问题与注意事项 不要混用C和C++的内存管理函数 连续开辟的空间要用delete[]释放 析构函数对内存管

2026-05-30 21:33:20 216 1

原创 类和对象全解:你想知道的这里都有,默认成员函数、友元、隐式类型转换、const和static修饰

本文全面解析C++类和对象的核心概念,包括语法定义、访问限定符、类域、实例化及对象大小计算等基础知识。重点讲解了this指针的工作原理及其在成员函数中的隐式使用,并通过代码示例演示了空指针调用成员函数的不同情况。文章还详细介绍了六大默认成员函数(构造函数、析构函数等)的基本特性,强调默认生成函数与自定义实现的区别。通过日期类和栈类的示例,帮助读者深入理解面向对象编程中的封装特性。适合具备C语言基础和C++入门知识的读者学习。

2026-05-18 21:16:46 505 9

原创 C++入门基础

C语言专栏数据结构专栏C++专栏作者仓库。

2026-05-07 16:25:12 432 8

原创 二叉树与堆,从原理到 Top-K 应用(C语言实现)

本篇是数据结构初阶的一课。学习二叉树的链式存储与遍历技巧,并揭开堆(Heap)这种特殊完全二叉树的神秘面纱。会通过经典的 Top-K 问题,展示如何利用堆在海量数据中高效筛选出最大或最小的前 K 个数。

2026-05-03 21:53:20 426 2

原创 用队列与双队列模拟复习C语言:链表、指针操作、结构体组合、FIFO原理、均摊时间复杂度分析

本文首先基于单链表实现了基础的队列数据结构,深入剖析了头尾指针的维护与内存管理;随后通过“用队列实现栈”的经典算法题,揭示了利用双队列倒腾数据以实现FIFO特性的底层逻辑,并结合代码详细讲解了如何通过延迟策略优化时间复杂度

2026-05-01 15:22:14 400 2

原创 C语言用栈解决括号匹配:函数、结构体、动态内存管理、指针、断言

通过从零实现一个 C 语言栈,并将其应用于解决经典的“有效括号”算法题,深入剖析栈的 LIFO 原理、动态数组的扩容机制以及如何利用栈的特性优雅地处理嵌套与匹配问题。在动手实践中,全面复习 C 语言的核心知识

2026-04-17 21:12:15 491 13

原创 用贪吃蛇复习C语言:函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32API、位运算、指针

电脑上的Windows系统提供了各种服务,你可以用这些服务对程序进行控制,下面我们简单介绍几个这次贪吃蛇会用到的API。既然写了枚举,而且蛇的方向时可以一一列举的,那么为了方便管理,我们用枚举类型列举蛇的方向UP = 1,DOWN,LEFT,RIGHT还是一样,我们对游戏状态也可以一一列举,于此同时通过判断状态来判断游戏是否结束游戏运行时我们需要知道蛇的各个节点的坐标才可以打印蛇,实现移动和增长,而这种已知头就能知道尾巴的数据结构,我们可以用单链表,其单链表本质就是结构体。

2026-04-06 20:11:28 378 1

原创 C语言中的自定义类型及其相关问题:结构体、联合体(共用体)、枚举、位段、结构体大小计算

首先是char,从0偏移开始存,然后是嵌套的结构体,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,上面已经看了最大对齐数是8,则要从8的倍数开始存16个字节,最后是double ,大小为8,默认对齐数是8,则对齐数是8,最后结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。上面的学习我们发现联合体的成员是共同创建的,那么我们可以创建一个char类型和int类型的成员,用char的值判断大小端字节序,因为char的值只有可能是两种情况。下一个是char c;

2026-03-15 14:28:27 376

原创 数据再内存中的存取:大小端字节序、源码、反码、补码

而随着不断发展,处理器的位数也越来越高,寄存器的宽度大于一个字节,这就有一个问题:如果安排存放大于一个字节的数据,这就需要大小端字节序。是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。有符号的整数,三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表。指向a,对这个指针进行强制类型转换为字符型指针,此时解引用会读取一个字节的内容,那么用字符型指针解引用就为1。

2026-03-09 13:19:54 207 1

原创 浅谈C语言中的指针:指针变量大小、const修饰、指针加减、野指针、数组传参本质、函数指针、转移表(函数指针数组)

我们思考函数的形参是实参的临时拷贝,那么再函数内部进行变量交换时交换的时形参的数值,而实际参数依旧没变。为解引用操作符,将指针解开之后,编译器会按指针类型进行读取内存,例如整形指针解开之后编译器会按照指针所指向的位置往后读取4个字节,这样就可以像平常一样使用变量。,将各个函数的入口整合起来,这样可以少写很多if判断该用哪个函数,即创建一个数组,数组的类型是函数指针类型,数组的每一个元素都是一个函数的指针。那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参传递的是数组⾸元素的地址。

2026-02-26 17:46:09 643 1

原创 C语言中移位操作符、位操作符详解

在之前的文章中,介绍部分简单的操作符,但是在实际运用中,位操作符也很重要,特别是在单片机领域。下面所有举例都是四个二进制位,是为了方便展示,实际上整形储存是4个字节,即32个二进制位。归零性:a ^ 0 = a(任何数异或 0,所有位不变,结果为自身);自反性:a ^ a = 0(相同数异或,所有位都相同,结果为 0);能把n的二进制序列中最右边的1去掉,我们可以不去掉但是打印出来,去让。结合律:(a ^ b) ^ c = a ^ (b ^ c);移位操作符针对的是一个整数的储存在内存中的数据,即反码。

2026-02-07 21:25:17 592

原创 C语言中的递归思想

C语言中递归是很重要的思想,本文介绍了其使用和缺点,并不是什么时候都适合用递归

2026-02-03 16:58:16 608

原创 C语言基于数组的扫雷游戏(无指针,递归方面知识,运用了ASCII编码——字符数字和整形数字的转换,适合新手练习)

用数组和函数的知识做一款纯数字版本的扫雷游戏吧.这个游戏需要学习函数,数组,多文件。没有用到数组和递归

2026-01-29 22:51:19 2124 1

原创 详解printf中的各种输出格式(限定宽度,限定小数位数,限定字符串)

C语言中的打印/printf函数的规范格式,包括限定数字宽度,小数位数,正负号,字符串长度

2026-01-06 14:47:57 374

原创 浅谈C语言:数据类型;有无符号signed/unsigned;sizeof;变量与常量;各种操作符;强制类型转换

C语言的数据类型,有无符号,sizeof,各种操作符,强制类型转换

2025-12-25 14:25:30 1105

原创 初识C语言:main函数,库函数,关键字,转义字符,字符串和结束,占位符

初识C语言,一些初学者能接触到的

2025-12-22 13:54:14 1027 1

原创 记自己的目标

我是暖焰核心(网名),是一名二本院校大一新生,电子信息工程专业,我的变成目标是学会C和C++,还有python,以后只要能做办公室就行。目前打算跟线上课去学编程,因为学校还没那么快开编程课,而且我们学校的设备有百年历史,学的技术老到外面人都没听过,每天花一小时在编程上足以,最想进国外的游戏公司,待遇好还不卷,但是。

2025-11-29 21:00:36 113 1

空空如也

空空如也

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

TA关注的人

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