自定义博客皮肤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)
  • 收藏
  • 关注

原创 283. 移动零

摘要:题目要求将数组中的零元素移动到末尾,同时保持非零元素的相对顺序。解决方案采用双指针法:指针i遍历数组,指针j标记非零元素位置。当遇到非零元素时,若i≠j则交换元素,确保非零元素前移且最多交换一次。时间复杂度O(n),空间复杂度O(1)。示例输入[0,1,0,3,12]处理后输出[1,3,12,0,0]。该方法高效地实现了原地操作,避免了不必要的元素移动。

2025-08-22 20:50:58 269

原创 459. 重复的子字符串

摘要:本文探讨了如何判断一个字符串能否由其子串重复构成。提供了两种解决方案:(1)将字符串s与自身拼接后去掉首尾字符,若剩余部分包含原字符串s则返回true;(2)暴力枚举可能子串长度,检查重复子串是否能构成原字符串。方法一通过字符串匹配实现,时间复杂度约O(n²);方法二通过遍历验证子串重复性。两种方法均能有效解决问题,适用于长度≤10^4的字符串。示例验证了算法的正确性。

2025-08-20 16:47:28 327

原创 C语言变量的声明和定义有什么区别?

变量声明与定义的区别在于内存分配:声明(如extern int a)仅告知编译器变量存在但不分配内存,多用于头文件共享;定义(如int a=10)会分配内存且可初始化,全局变量只能定义一次。局部变量声明即定义。关键区别在于声明是"告知存在",定义是"创建实体"。可通过extern关键字区分,无extern的全局声明默认为定义。记忆要点:声明说"有",定义说"在这里建"。

2025-08-11 22:33:37 763

原创 242. 有效的字母异位词

本文介绍了一种判断两个字符串是否为字母异位词的方法。通过比较字符串长度,统计每个字母出现次数(s字符串加1,t字符串减1),最后检查统计结果是否为0来判断。该方法时间复杂度O(n),空间复杂度O(1),适用于仅包含小写字母的字符串比较。关键步骤包括:长度检查、字母计数、结果验证。

2025-08-10 22:41:06 385

原创 28. 找出字符串中第一个匹配项的下标

题目要求在一个主字符串haystack中查找子字符串needle首次出现的位置索引。若找到则返回起始下标,否则返回-1。示例1中"sad"在位置0和6出现,返回第一个匹配位置0;示例2中"leeto"未出现返回-1。注意字符串长度限制在10^4以内且均为小写字母。该问题考察字符串匹配算法实现。

2025-07-31 22:44:33 378

原创 389.找不同

摘要:给定两个字符串s和t,其中t由s随机重排后额外添加一个字母组成。要求找出被添加的字母。示例:s="abcd",t="abcde"输出"e"。解决方法可以通过统计字符出现次数或使用异或运算。关键点在于t比s多一个字符,且s和t仅包含小写字母。时间复杂度为O(n),空间复杂度为O(1)。

2025-07-29 23:35:50 93

原创 1768. 交替合并字符串

本文描述了一个字符串合并问题:给定两个字符串word1和word2,要求通过交替添加字母的方式合并它们。具体规则是:依次从两个字符串中各取一个字符交替拼接,当其中一个字符串较短时,将较长字符串剩余部分直接追加到结果末尾。示例展示了不同长度字符串的合并结果,如"abc"和"pqr"合并为"apbqcr"。该问题要求处理长度不超过100的小写字母字符串,确保合并后的字符串包含所有原始字符并保持交替顺序。

2025-07-29 23:32:07 230

原创 SPI通信协议

SPI是一种全双工同步串行通信接口,采用主从架构,支持多从设备。其核心引脚包括MISO(主入从出)、MOSI(主出从入)、SCK(时钟)和NSS(片选)。SPI通信本质上是主从设备间的数据交换,每次发送必然伴随接收。相比IIC(最高400KHz),SPI速率可达10MHz(部分芯片达42Mbps)。工作模式由时钟极性(CPOL)和相位(CPHA)决定,常见4种模式(0-3),需根据外设规格选择。

2025-07-28 23:02:06 951

原创 串口通信模块

摘要 串行接口(Serial Interface)是一种数据逐位顺序传输的通信方式,具有通信线路简单的特点。串口通信分为单工、半双工和全双工三种模式,分别适用于不同应用场景。关键参数包括波特率(传输速率)、数据字长(8/9位)、停止位(1-2位)和校验位(奇偶校验)。串口编程需要确定硬件引脚(如PA9、PA10)并配置相关参数。与并行通信相比,串行通信虽然传输速度较慢,但硬件实现更简单。编程时还需注意特殊模式配置,如半主机模式的使用。

2025-07-28 22:41:21 400

原创 21.预处理-头文件

C语言头文件(.h)用于存放多个源码文件共享的公共资源,包含全局变量声明、函数声明、宏定义、结构体定义等。使用时通过#include指令包含,自定义头文件用双引号"",系统头文件用尖括号<>。为避免重复包含,应采用条件编译格式:#ifndef _HEADNAME_H...#endif。编译时通过-I选项指定自定义头文件路径。头文件机制本质上是通过预处理器将内容复制到源文件中,提高了代码复用性和可维护性。

2025-07-27 23:29:51 491

原创 20.预处理-条件编译

本文介绍了C语言中无值宏定义和条件编译的用法。无值宏常用于条件编译判断,如#define BIG_ENDIAN。条件编译有三种形式:#if判断宏值真假,#ifdef/#ifndef判断宏是否定义。条件编译主要应用于:1)控制调试语句,通过编译选项-D启用;2)选择不同实现代码,如在大型项目中配置不同功能模块。文章通过网卡选择的示例展示了多路分支条件编译的实际应用。

2025-07-27 23:24:15 478

原创 19.预处理-宏定义

摘要:C语言预处理是在编译前进行的文本替换处理,以#开头的指令由预处理器执行。预处理指令包括#include、#define等。宏分为无参宏和带参宏,本质是文本替换,能提高代码可读性和执行效率。无参宏如#define PI 3.14直接替换;带参宏如#define MAX(a,b)需要谨慎使用括号避免副作用。宏支持符号粘贴(##)拼接标识符,但需注意使用规则。预处理是编译过程(预处理-编译-汇编-链接)的第一步,可通过gcc -E选项单独执行预处理。

2025-07-26 20:23:04 1207

原创 18.结构体尺寸

本文系统讲解了CPU字长、地址对齐与结构体内存布局等底层概念。首先阐明CPU字长决定了系统存取内存的数据单元大小(如32位系统以4字节为单元),进而解释了地址对齐原理:数据应尽量存储在一个单元内以避免性能损失。文章详细分析了变量的m值(对齐基数)计算方法,并介绍了GNU的attribute语法用于手动设置对齐属性。对于结构体,其M值由成员最大m值决定,并需通过填充字节保证整体对齐。最后探讨了跨平台移植问题,提出了固定成员m值和使用packed属性压实结构体两种解决方案。

2025-07-26 19:22:45 1183

原创 17.联合体与枚举

联合体(共用体)是一种特殊的数据类型,其成员共享同一块内存空间,使得在任何时刻只有一个成员有效。联合体的大小由最大成员决定,对其任一成员的赋值都会覆盖其他成员。联合体常作为结构体成员,用于表示互斥属性。枚举类型则用于定义一组受限的整型常量,提高代码可读性。C语言中枚举本质是整型,而C++中才实现其完整特性。联合体和枚举分别通过内存共享和常量命名机制,优化了程序的内存使用和可维护性。

2025-07-24 14:17:41 579

原创 16.结构体尺寸

本文系统阐述了CPU字长、地址对齐及结构体内存布局的相关概念。CPU字长决定了系统存取数据的基本单位(如32位系统以4字节为单元)。地址对齐要求数据存储位置满足特定倍数关系(m值),未对齐会导致性能下降或系统错误。结构体的M值由成员最大m值决定,影响其内存布局和填充规则。文章还探讨了数据可移植性问题,提出通过固定成员m值或使用packed属性来确保跨平台一致性。这些概念对理解系统内存管理和优化数据结构具有重要意义。

2025-07-24 14:08:13 933

原创 15.结构体

C语言结构体基础与应用摘要:结构体是C语言中一种自定义数据类型,用于将不同基础类型组合成具有现实意义的复合类型。文章介绍了结构体的定义方式(struct标签{成员列表})、两种初始化方法(普通初始化和指定成员初始化),重点讲解了成员引用(使用.操作符)、指针操作(通过->访问成员)以及结构体数组的使用。指定成员初始化的优势包括顺序无关性、部分初始化和良好的扩展性。全文通过代码示例展示了结构体的基本操作,为理解和使用这一重要的数据结构提供了清晰指导。

2025-07-23 19:31:30 765

原创 1.IIC通信协议详解

IIC总线是一种由飞利浦公司开发的串行通信总线,采用多主从架构。其核心引脚包括数据线SDA和时钟线SCL,通信过程通过起始/停止信号控制。IIC采用器件地址寻址机制,支持半双工通信,适用于控制场景而非大数据传输。通信时序要求严格,SCL高电平时SDA需保持稳定。实际应用中常采用软件模拟IIC实现,便于时序控制和引脚管理。典型工作流程包括起始信号、地址/数据传输、应答机制和停止信号,空闲状态下SDA和SCL保持高电平。

2025-07-23 19:13:57 1136

原创 14.存储期

C语言变量生命周期分为三种:自动存储期(栈变量)、静态存储期(全局/静态变量)和自定义存储期(堆变量)。自动变量在作用域内自动分配释放;静态变量与程序同生命周期,未初始化会自动置零;堆变量通过malloc/calloc申请、free释放,需手动管理。static修饰局部变量会转为静态存储,修饰全局变量则限制其文件作用域。堆内存用完必须释放,但free不会清零或改变指针内容。

2025-07-23 00:12:06 419

原创 13.作用域

C语言作用域详解:作用域指标识符的可见范围,包括函数声明作用域、局部作用域和全局作用域。局部变量在代码块内有效,全局变量可跨文件访问。嵌套作用域中,内层同名变量会临时遮蔽外层变量。static关键字有两种用法:限制全局变量/函数到文件作用域,或将局部变量存储到数据段而非栈内存。合理控制作用域能避免命名冲突,提高代码可维护性。

2025-07-22 14:15:39 463

原创 12.内存管理

本文介绍了C语言程序的内存布局,主要包括栈、堆、数据段和代码段四大区域。栈内存存储局部变量、函数参数等,具有自动分配和释放的特点;静态数据(全局变量和静态局部变量)存储在数据段,生命周期贯穿整个程序;代码段存放程序指令。重点阐述了堆内存的动态管理特性,包括使用malloc/calloc申请内存和free释放内存的注意事项。文章还区分了物理内存与虚拟内存的概念,指出所有进程的虚拟内存布局相同,便于系统管理。通过分析不同内存区域的特点,帮助开发者理解C语言内存管理机制。

2025-07-21 23:33:22 1219

原创 11.字符串函数

本文介绍了C语言中常用的字符串处理函数及其注意事项:1)strstr用于查找子串;2)strlen获取字符串长度;3)strtok分割字符串时会修改原字符串;4)strcat/strncat用于拼接字符串,后者更安全;5)strcpy/strncpy用于复制字符串,后者有边界检查;6)strcmp/strncmp比较字符串ASCII值;7)strchr/strrchr分别从左/右查找字符。重点强调了安全函数(strncat/strncpy)的使用以避免内存溢出,并提供了各函数的典型用法示例。

2025-07-21 23:15:15 620

原创 10.特殊函数

本文摘要:介绍了三种特殊函数类型及其应用。静态函数通过static关键字限定作用域,减少命名冲突。递归函数通过自我调用解决问题,需包含终止条件以避免无限递归,如阶乘、字符串翻转等应用。回调函数由接口提供方间接调用,典型应用如信号处理,通过约定接口实现模块解耦。三种函数类型各具特点,分别用于作用域控制、递归问题求解和模块间协作编程。

2025-07-19 17:30:20 576

原创 9.函数基础

C语言函数是模块化编程的核心单元,通过函数头(名称、参数、返回类型)和函数体实现功能封装。函数调用时实参与形参需类型匹配但内存独立,执行流程涉及上下文切换。局部变量存储在函数栈内存中,具有临时性和作用域限制。注意事项包括:避免返回局部变量地址、栈空间有限不宜分配大变量。典型函数示例展示了参数传递、返回值处理等关键用法,体现了C语言通过函数实现代码复用和逻辑封装的特点。

2025-07-19 17:24:15 1065

原创 8.指针-进阶

本文解析了C语言中指针的核心概念:1.指针由数据类型和变量名组成,不同指针的区别仅在于指向的数据类型不同;2.特殊指针包括char型指针(常用于字符串)、多级指针(指向指针的指针)、void型指针(需强制类型转换)、const型指针(限制修改)和函数指针(可简写调用);3.重点阐述了各种指针的声明语法和使用场景,如函数指针在调用时可省略取址和间接引用操作符。这些概念是理解C语言内存管理和函数调用的关键基础。

2025-07-18 15:01:51 667

原创 7.数组-进阶

本文探讨了C语言中数组的多重含义和特性。数组名在不同上下文中可能代表整个数组或其首元素地址,如在定义、sizeof运算或取址时表示整个数组,其他情况则为首元素地址。数组下标运算本质是指针运算的简写形式。字符串常量被视为匿名数组,遵循相同规则。还介绍了两种特殊数组:零长数组(用于结构体末尾实现可变长度数据)和变长数组(定义时使用变量指定长度,但长度固定后不可变)。变长数组不支持初始化。这些特性展示了C语言数组与指针的紧密联系及其灵活的内存管理方式。

2025-07-18 14:38:53 559

原创 6.指针-初阶

本文介绍了C语言中指针的基础知识,包括内存地址、指针概念、定义赋值、索引操作以及指针尺寸。重点讲解了野指针的危害及防范措施,以及空指针的安全使用方式。文章还涉及指针运算,说明指针加减法会导致地址上下移动若干个目标单位。内容涵盖了指针的核心概念和常见操作,为理解指针提供了系统性的基础知识框架。

2025-07-17 20:35:14 714

原创 5.C语言-数组

本文介绍了C语言中数组的基本概念和使用方法。数组是一组相同类型变量的连续存储空间,通过下标访问元素。文章详细讲解了一维数组、字符数组和多维数组的定义、初始化及引用方式,并剖析了数组定义的语法结构:由元素类型和数组名+元素个数两部分组成。其中,字符数组需注意字符串结束符'\0'的使用,多维数组则是元素为数组的数组。文章还通过示例说明了数组越界、部分初始化等常见问题,以及指针数组等复杂类型的定义方法。

2025-07-16 21:28:30 531

原创 4.运算符

本文系统介绍了C语言中的各类运算符及其用法。主要内容包括:1)算术运算符(+、-、*、/、%等)及其前后缀运算规则;2)关系运算符(>、<、==等)组成的布尔表达式;3)逻辑运算符(!、&&、||)及其短路特性;4)位运算符(~、&、|、^、<<、>>)的二进制位操作;5)特殊运算符如赋值、复合赋值、条件运算符(?:)等;6)sizeof和return运算符的特殊用法。文中还通过示例说明了运算符优先级和结合性的重要性,并提供了相关练习题。

2025-07-16 12:03:16 782

原创 3.数据类型-下

隐式转换示例代码不管是隐式转换,还是强制转换,变换的都是操作数在运算过程中的类型,是临时的,操作数本身的类型不会改变,也无法改变。

2025-07-14 20:15:04 633

原创 2.数据类型-上

计算机中存储的都是1和0,因此各种字符都必须被映射为某个数字才能存储到计算机中,这种映射关系形成的表称为 ASCII 码表。字符本质上就是一个单字节的整型,支持整型所有的运算。指出下列常量的类型。字符串的内部存储细节。

2025-07-14 18:19:25 918

原创 1.C语言程序入门

变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647。int a 代表在内存中开辟一块小区域,称为 a ,用来存放整数,a 一般被称为变量。long long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长长整型。变量 a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节。long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长整型。short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为短整型。

2025-07-14 17:51:57 340

原创 1.两数之和

本文详解LeetCode经典题目"两数之和"的C语言解法。题目要求在给定数组中找出和为目标值的两个元素下标。主要介绍两种解法:暴力枚举法(时间复杂度O(n²))和更优的哈希表法(时间复杂度O(n))。哈希表法通过存储元素及其下标,快速查找目标值补数,显著提升效率。文章比较了两种方法的时间/空间复杂度,强调哈希表法的优势。这道题既是算法基础训练,也涉及C语言的指针与内存管理,是面试常见题目。

2025-06-26 01:06:25 290

农业智能环境管家设计与实现

嵌入式STM32;数据采集;自动化控制;远程通信;OLED模块,DX-BT24 蓝牙模块

2025-07-26

超声波测距仪的设计与制作

超声波测距仪的设计与制作 "题目的要设计一个超声波测距仪,可以应用于汽车倒车、建筑施工工地以及一些工业现 场的位置监控,也可以用于如液位、并深、管道长度的测量等场合。具体要求如下 1 测量围在 0.5-2.00m,测量精度 1cm。 2 测量时与被测物体无直接接触,能够清晰稳定地显示测量结果 3 液晶显示测距结果" 所用模块:STM32F103C8T6,LCD显示屏,HC_SR04超声波模块,按键,LED灯

2025-07-26

Keil5-529版本(MDK-ARM)

Keil5-529版本(MDK-ARM)

2025-07-23

截图助手picpick

截图助手picpick

2025-07-23

STM32单片机应用与全案例实践 (沈红卫 等)

STM32单片机应用与全案例实践 (沈红卫 等)

2025-07-22

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

TA关注的人

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