- struct:成员并排,空间叠加
- 位段:struct 里按 bit 分配,极致省空间
- union:成员重叠,空间共享
- enum:有限常量,替代宏,更安全
一、结构体 struct:成员并排,空间叠加
1. 基本声明
2. 内存对齐
对齐规则:
- 1.首成员偏移为 0
- 2.后续成员对齐到:
min(默认对齐数, 自身大小)的整数倍 - 3.总大小是最大对齐数的整数倍
- 4.嵌套结构体:内部对齐到自身最大对齐数
3. 结构体传参:优先传地址
- 传整个结构体:拷贝,开销大
- 传指针:直接访问,高效
- 技巧:省空间技巧:小成员放一起
- void print(struct S* ps) { ps->i; }
二、位段:结构体里抠 bit,极致省空间
1. 什么是位段
在 struct 中用
:n指定占用多少 bit。2. 内存分配
- 按
int(4字节)或char(1字节)为单位开辟 - 跨平台(大小端、分配方向)不确定
3. 注意
- 不能取地址
&s.a(bit 无地址) - 适合网络协议、寄存器、标志位
三、联合体 union:成员重叠,空间共享
1. 声明与特点
union Un { char c; int i; };- 所有成员共用同一块内存
- 大小 =最大成员大小,并对齐
- 赋值演示:
3. struct vs union 对比
- struct:叠加→
sizeof=8 - union:重叠→
sizeof=4 四、枚举 enum:有限常量,替代宏
1. 声明
enum Color { RED, // 0 GREEN, // 1 BLUE // 2 };可手动赋值:
2. 优点(对比 #define)
- ✅ 可读性高
- ✅ 有类型检查,更安全
- ✅ 调试可见(宏会被删除)
- ✅ 作用域可控
- 3. 使用
- 五、总结
C 语言自定义类型:结构体、位段、联合体、枚举
张小明
前端开发工程师
有没有前端的“牛人”哇,自己公司招募伙伴
1、负责公司Web前端产品的设计与开发,完成高质量的代码实现 可利用Claude code等编程工具; 2、参与产品需求分析与技术方案制定,持续优化系统性能与用户体验; 3、与后端开发协作,确保接口联调高效、数据交互准确&a…
为什么高级的棕色,永远是大自然原创,而非工厂复刻?
在审美高度同质化的当下,我们的配饰、穿搭、生活好物,似乎都逃不开工业调色的桎梏。市面上的棕色系美学层出不穷:摩卡棕、复古棕、焦糖棕、奶咖棕……这些被精心调试的流行色,看着精致干净,却有一个共同的短板——没有…
FlexNet许可服务器权限配置错误解决方案
1. 问题现象与背景解析最近在配置FlexNet Publisher(FNP)许可服务器时,遇到了一个典型问题:通过LMTOOLS工具添加新服务后,无论是启动还是停止服务都报错。启动时报"VD is starting, please check vendor daemons …
Arm Development Studio静默安装与自动化部署指南
1. Arm Development Studio 静默安装指南作为一名嵌入式开发工程师,我经常需要在多台设备上部署Arm Development Studio(简称Arm DS)开发环境。手动点击安装不仅效率低下,在自动化部署场景下更是无法接受。经过多次实践࿰…
Keil MDK中FlexNet许可证错误-7,10015和-4的解决方案
1. 问题背景与现象解析在Keil MDK开发环境中使用FlexNet Publisher(FNP)授权系统时,工程师可能会遇到两个典型的许可证错误代码:-7,10015和-4。这两个错误通常发生在手动借用(Check-Out)和归还(…
内连接,左连接,右连接怎么区别开来?
区分这三种连接其实非常简单,核心就在于看**“谁的数据必须全部保留,谁的数据没有匹配就要被过滤掉”**。 为了让你彻底搞懂,我们可以把 user 表(用户)和 orders 表(订单)想象成两个班级&#x…