- 博客(9)
- 收藏
- 关注
原创 memset函数用法
摘要(147字) memset是C/C++中用于按字节填充内存的函数,原型为void* memset(void* ptr, int value, size_t num)。其核心特性是按字节处理(取value低8位),常用于内存清零、字符数组初始化或结构体清零。使用时需注意: 非字符类型初始化非零值会导致意外结果(如int数组元素变为0x01010101); 越界访问会引发崩溃; 禁用场景:C++含虚函数或指针的类。 正确用法示例包括清零数组(memset(arr, 0, sizeof(arr))),错误用法
2025-06-03 19:55:58
383
原创 C语言结构体赋值总结
C语言结构体赋值方法总结 C语言结构体赋值有多种方式: 声明时初始化:直接赋初值,支持顺序或指定成员初始化(C99+) 直接赋值:同类型结构体变量间可直接赋值(浅拷贝) 逐成员赋值:灵活修改单个成员 memcpy():内存级复制,需包含<string.h> 指针操作:通过结构体指针访问成员 函数返回赋值:结构体可作为函数返回值 嵌套结构体:需分层初始化或赋值 复合字面量(C99+):临时匿名结构体赋值 注意事项: 浅拷贝时,指针成员会共享同一内存,需手动实现深拷贝 动态分配的结构体需注意内存释放
2025-06-02 22:23:07
401
原创 C语言数组赋值方法总结
C语言数组赋值方法总结 C语言中数组赋值主要分为初始化赋值和后续赋值两种方式。对于基本数据类型数组,可通过完整或部分初始化;字符数组初始化时需注意是否自动添加'\0'。后续赋值可逐个元素赋值、使用循环批量赋值,或利用memset快速填充(注意其字节级操作特性)。数组复制可使用memcpy,字符串数组则用strcpy(需确保以'\0'结尾)。使用时需注意:数组长度固定不可变、严防下标越界、数组名是常量指针不可直接赋值、字符数组作为字符串使用时必须包含结束符。不同赋值方式适用于不同场景,需根据数组类型和需求选择
2025-06-02 11:56:44
287
原创 KEIL编译工程后输出信息详解(Code、RO-data、RW-data、ZI-data),工程占用FLASH和RAM计算及分配
本文介绍了Keil MDK工程编译后查看信息的方法及存储空间配置要点。1)通过Build Output窗口或.map文件查看工程信息,需确保生成map文件。2)详细解析Flash和RAM的组成:Flash存储代码(Code)、只读数据(RO-data)和初始化变量(RW-data初始值);RAM运行存储RW-data和未初始化变量(ZI-data)。3)存储器分配方法:Flash起始地址通常为0x08000000,RAM为0x20000000,需根据芯片手册设置合理大小。特别指出RW-data需从Flash
2025-06-01 10:53:14
623
原创 keil中各种编译选项的功能和区别
Keil MDK-ARM编译操作指南:提供Translate(单文件编译)、Build(增量编译)和Rebuild(全量编译)的核心区别,以及BatchBuild、BatchRebuild等批量操作功能说明。Translate用于快速检查单个文件语法错误,Build适合日常开发调试,Rebuild确保完整重新编译。批量操作支持多目标配置管理,其中BatchBuild实现多版本快速生成,BatchRebuild保证全量重新编译,BatchClean清理中间文件,BatchSetup统一配置参数。建议日常使用B
2025-05-27 23:52:20
282
原创 预处理指令ifndef/define/endif和#ifdef __cplusplus extern “C“ { #endif的作用
本文介绍了C/C++头文件保护机制和跨语言链接处理。头文件保护使用#ifndef、#define、#endif组合防止重复包含,通过检查唯一宏定义来避免编译错误。建议宏名采用大写头文件名形式以确保唯一性。对于C++调用C代码的情况,使用#ifdef __cplusplus配合extern "C"语法,确保C++按C语言规则处理函数声明,解决名称修饰导致的链接问题。文中提供了标准的头文件框架示例,包括适当的位置标记,帮助开发者正确组织头文件内容。这种结构既能防止重复包含,又能保证C/C++
2025-05-27 23:28:49
427
原创 C语言static关键字作用详解
摘要:static关键字在C语言中用于改变变量和函数的作用域与生命周期。修饰局部变量时,使其变为静态存储,生命周期延长至程序运行期,但作用域仍限于函数内;修饰全局变量或函数时,限制其仅在当前文件可见,避免命名冲突。典型应用包括:1)保持局部变量值不被销毁;2)隐藏模块内部实现细节。通过控制存储位置(静态区)和链接属性(内部链接),static增强了程序的模块化和安全性。
2025-05-25 22:04:49
312
原创 C语言中双感叹号(!!)作用解析
初识双感叹号(!!),它是一个陌生的事物。但是,我们已经知道单个感叹号!在C语言中是逻辑非运算符,它会把非零的值变成0,把0变成1。比如,!5的结果就是0,而!0的结果就是1。通过查阅资料,双感叹号(!!)并不是C语言中的运算符。因此,我们猜测双感叹号(!!)仅仅是将逻辑非连续运行两次而已。经过验证,事实也是如此。!!通过两次逻辑非操作,将任意整数转换为0或1,确保结果的布尔语义明确。如果仅是简单的了解,着急赶路,那么到此就可以结束了。如果有时间,倒是可以深入剖析下。接下来需要讨论的两点:双感叹号!!
2025-05-25 13:01:01
542
原创 STM32CubeMx教程---LED闪烁实验
库函数开发:ST官方将寄存器操作封装成库函数,开发者只需调用ST官方封装好的库函数进行编程即可,相对于直接的寄存器开发,大大提升了开发效率,降低了开发难度。只是ST官方这也是过去的一个时代主流开发模式,如博主最早接触的原子和野火教程就是采用库函数开发的。据说是ST全系列的一个大整合,从1种芯片到另1种芯片,解决了移植的老大难问题。明显的缺点是:寄存器数量相对51单片机数量太多太多,编程效率太低,对开发者要求太高;*自行调用HAL开发,通过写代码的方式完成初始化工作(这方面与库函数开发类似)
2023-09-06 11:06:03
978
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人