- 博客(19)
- 收藏
- 关注
原创 C语言——预处理详解
本文深入解析C语言中sizeof与strlen的本质区别,结合数组、指针等经典笔试题,剖析其在内存计算与字符串处理中的应用。同时系统讲解预定义符号、#define常量与宏的使用规范,揭示宏参数副作用、运算符优先级及##、#等高级用法,并对比宏与函数的优劣,强调命名约定与#undef、命令行定义等实用技巧,助力读者掌握C语言底层精髓。
2026-09-27 19:44:53
570
58
原创 C语言——编译和链接
本文系统讲解C语言文件操作核心知识,涵盖文件概念、流与文件指针机制,重点解析fopen、fclose及错误处理,结合fseek、ftell等实现随机读写,并深入剖析缓冲区原理与fflush刷新机制,强调打开后判空、关闭置空等最佳实践,为高效、安全的文件操作提供完整技术框架。
2026-09-26 15:15:22
352
29
原创 C语言——文件操作(2)
本文系统讲解C语言文件操作核心知识,涵盖文件概念、二进制与文本文件区别、流与文件指针机制,重点解析fopen、fclose及常见错误处理。通过实例演示fseek、ftell、rewind实现文件随机读写,强调打开文件后判断返回值、关闭时置空指针等最佳实践。深入剖析文件缓冲区原理及fflush强制刷新机制,阐明更新模式(如w+)下读写切换的注意事项,为掌握高效、安全的文件操作提供完整技术框架。
2026-09-26 14:54:12
456
27
原创 C语言——⽂件操作(1)
本文系统讲解C语言文件操作核心知识,涵盖文件概念、二进制与文本文件区别、流与文件指针机制,重点解析fopen、fclose函数使用及常见错误处理。通过实例演示文件顺序读写(如fputc),并强调打开文件后必须判断返回值、关闭文件时置空指针等最佳实践,为掌握文件操作提供完整技术框架。
2026-09-26 14:36:37
530
39
原创 C语言——动态内存管理
本文系统介绍了C语言动态内存管理的核心内容,包括malloc、free、calloc、realloc四大函数的使用方法、常见错误及解决方案。文章首先阐述了动态内存分配的必要性,然后详细讲解了各个函数的功能、参数和返回值,并通过代码示例演示正确用法。针对动态内存管理中易出现的6种错误(如NULL解引用、越界访问、错误释放等)进行了分析。最后通过两道经典笔试题,深入剖析了返回栈地址和内存泄漏问题,并介绍了柔性数组这一特殊数据结构。文末总结了C/C++程序的内存区域划分,为读者构建完整的动态内存管理知识体系。
2026-08-19 10:57:46
1084
99
原创 C语言——自定义类型:联合和枚举
本文主要讲解了C语言中的联合体和枚举类型。联合体(共用体)的特点是所有成员共用同一块内存空间,大小为最大成员的大小,并通过示例展示了其内存布局。枚举类型用于列举可能的取值,默认从0开始递增,也可手动赋值,相比#define定义常量更具可读性和类型安全性。文章还通过实例演示了联合体和枚举的声明、特点及使用方法,并比较了结构体与联合体的内存差异。最后,通过一个练习展示了如何利用联合体判断机器的大小端存储方式。
2026-08-17 12:16:27
800
63
原创 C语言——⾃定义类型:结构体
本文主要探讨C语言中的结构体相关知识,包括结构体声明、内存对齐、传参优化及位段实现。首先介绍了结构体的基本声明方式、变量初始化和特殊声明(如匿名结构体),并讲解了结构体的自引用问题。重点分析了结构体内存对齐规则及其存在的意义(空间换时间),通过示例展示如何优化结构体空间布局。同时对比了结构体传参的两种方式,推荐使用地址传参以提高效率。最后介绍了位段的概念及其内存分配特点,说明位段适用于节省存储空间的场景。文章通过代码示例和内存布局图解,帮助读者深入理解结构体的关键知识点和实际应用技巧。
2026-08-16 14:22:49
891
59
原创 C语言——数据在内存中的存储
摘要:本文主要介绍了数据在内存中的存储方式,包括整数和浮点数的存储格式。对于整数,详细解释了原码、反码、补码的概念及其转换规则,并指出计算机实际存储的是补码。同时介绍了大小端字节序的概念及其判断方法,通过多个代码示例展示了不同类型数据的存储和打印结果。对于浮点数,根据IEEE 754标准,分析了其存储方式,包括符号位、指数位和有效数字位的分配规则。文章通过代码实例和内存分析,帮助读者深入理解数据在内存中的存储机制。
2026-08-15 14:12:36
1099
40
原创 C语言——内存函数
本文介绍了C语言中常用的四个内存操作函数:memcpy、memmove、memset和memcmp。 memcpy用于内存块拷贝,不能处理内存重叠情况; memmove功能类似memcpy但可以处理内存重叠; memset用于设置内存块内容,按字节操作; memcmp用于比较两块内存内容,可指定比较长度。 每个函数都给出了功能说明、参数解释、返回值和示例代码,并配有运行结果截图。特别强调了这些函数都需要包含<string.h>头文件,并指出了使用时的注意事项。
2026-08-12 13:55:31
773
69
原创 C语言——字符函数和字符串函数
本文介绍了C语言中常用的字符串处理函数,主要分为字符分类、字符转换和字符串操作三类。字符分类函数如islower()用于判断字符类型;字符转换函数如tolower()和toupper()实现大小写转换。字符串操作函数包括:strlen()计算字符串长度;strcpy()和strncpy()实现字符串拷贝,后者更安全;strcat()和strncat()用于字符串追加;strcmp()比较字符串大小。文章详细说明了每个函数的功能、参数、返回值和使用注意事项,并提供了代码示例和模拟实现,帮助读者掌握这些基础但重
2026-08-11 13:45:40
930
53
原创 C语言——深度理解指针(6)
摘要:本文对比了C语言中的sizeof和strlen函数。sizeof是操作符,计算变量或类型所占内存大小(字节),不关心数据内容;strlen是库函数,统计字符串中\0之前的字符个数,可能越界查找。文章还解析了数组和指针的笔试题,强调数组名在不同上下文中的含义差异:单独使用表示整个数组,否则通常表示首元素地址。通过多个代码示例展示了sizeof和strlen在一维数组和字符数组中的具体应用与区别。
2026-08-08 18:12:42
6505
28
原创 C语言——深度理解指针(5)
本文介绍了回调函数的概念及qsort函数的使用方法。回调函数是通过函数指针间接调用的函数,其特点是由外部条件触发而非直接调用。文章通过加法运算示例展示了回调函数的实现原理。 qsort是C标准库中的快速排序函数,可对各种数据类型进行排序。文章详细讲解了qsort的参数和使用方法,并提供了多个示例: 整型数组排序 字符数组排序 字符串数组排序 浮点数数组排序 结构体数组排序(按年龄和姓名) 最后补充了结构体成员访问操作符(.和->)的使用区别,帮助理解结构体指针访问成员的方式。全文通过代码示例详细演示了各种数
2026-08-04 19:10:16
986
67
原创 C语言——深度理解指针(4)
本文主要介绍了C语言中几种重要的指针类型及其应用: 字符指针变量(char*):可以指向单个字符或字符串首地址,注意常量字符串共享内存的特性。 数组指针变量:指向整个数组的指针,声明形式为int (*p)[n],区别于指针数组int *p[n]。 二维数组传参本质:实际传递的是第一行一维数组的地址,形参可写成数组或指针形式。 函数指针变量:存储函数地址,声明如int (*pf)(int,int),调用时可简写为pf()。 函数指针数组:存储多个函数指针的数组,常用于实现"跳转表"模式。 typedef用法:
2026-08-01 23:57:57
665
47
原创 C语言——深度理解指针(3)
这篇文章主要讲解了C语言中数组和指针的相关概念和应用。主要内容包括:数组名本质上是数组首元素的地址,但在sizeof和&操作符下例外;如何用指针访问数组元素;一维数组传参本质是传递首元素地址;冒泡排序算法的实现;二级指针的概念与使用;指针数组的定义及其模拟二维数组的方法。文章通过代码示例和内存地址分析,帮助理解这些关键概念及其实际应用场景。
2026-07-31 19:53:43
787
44
原创 C语言——深度理解指针(2)
本文介绍了C语言中const修饰指针的用法、野指针问题及解决方法、assert断言的使用,以及指针传值和传址调用的区别。主要内容包括: const修饰指针的三种形式及其限制作用 野指针的成因(未初始化、越界访问、指向释放空间)和规避方法 assert断言的使用场景和NDEBUG宏的禁用作用 通过strlen模拟实现和变量交换示例,比较传值调用和传址调用的区别 重点指出传址调用通过指针建立函数与主调函数的联系,可实现变量修改 文章通过具体代码示例展示了各种指针使用场景和注意事项。
2026-07-30 12:53:01
672
41
原创 C语言——深度理解指针(1)
本文系统介绍了C语言指针的核心概念,主要内容包括: 内存与地址基础:内存被划分为字节单元,每个单元有唯一地址(指针),地址、指针、内存编号本质相同。 指针变量操作: 取地址操作符(&)获取变量首字节地址 指针变量存储地址,类型决定解引用权限(如int*操作4字节) 解引用操作符(*)通过指针修改变量值 指针特性: 大小与平台相关(32位4字节/64位8字节) 类型决定指针运算步长(如char+1跳1字节,int+1跳4字节) void*为通用指针类型,但不可直接运算 指针运算: 加减整数实现数组遍历 指针相
2026-07-27 17:34:07
333
25
原创 初学嵌入式(1)——认识STM32F103ZET6、仿真器
本文介绍了STM32F103ZET6微控制器的基本知识和硬件特性。首先解析了STM32命名规则,重点说明F103ZET6各字段含义:144引脚、512KB Flash、LQFP封装、-40~85℃工作温度。其次讲解了关键引脚功能,包括供电引脚(VDD/VSS)、复位引脚(NRST)、备用电池(VBAT)和启动模式选择(BOOT0)。最后简要介绍了DAP-Link仿真器的作用及连接方式。文章为初学者提供了STM32硬件接口的基础认知,涵盖芯片命名、引脚功能和外设连接等核心内容。
2026-07-26 14:21:50
412
43
原创 芯片工厂奇遇记:ARM、ST 和 STM32 的故事
ARM与意法半导体(ST)的合作模式解析:ARM专注于设计CPU内核架构(如Cortex系列),通过IP授权将"芯片蓝图"提供给ST等厂商;ST则基于ARM内核,自主整合外设接口,量产STM32系列单片机。该系列包含F(通用)、L(低功耗)、H(高性能)等子型号,覆盖从家电到工业控制的嵌入式场景。这种分工使ARM成为芯片设计基石,ST则通过硬件实现能力,为开发者提供丰富即用的微控制器解决方案。
2026-07-24 14:05:18
656
46
原创 初探嵌入式:藏在电器里的隐形电脑
本文概述了嵌入式系统的历史演变、基本概念及技术方向。嵌入式系统从1960年代航天专用计算机发展至今,经历了芯片革命、性能提升、开源智能化等阶段,现已广泛应用于物联网和AI领域。它作为专用计算机,专注于特定任务,具有高效、低成本特点。嵌入式系统核心硬件包括单片机(MCU)、应用处理器、FPGA和DSP四大方向:MCU适合简单控制任务;应用处理器支持复杂操作系统;FPGA可编程硬件电路;DSP专精信号处理。入门者通常从MCU软件开发切入,这是嵌入式领域最基础且应用广泛的方向。嵌入式技术正推动着万物互联的智能化发
2026-07-22 20:30:54
1201
74
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅