资讯动态

C语言第14讲:自定义类型(联合 枚举)

发布时间:2026/8/22 23:46:25 来源:尧图企业网站定制
本篇彻底搞懂联合体共用体和枚举类型语法 内存 面试点 使用场景一篇到位 目录联合体共用体声明与定义核心特点结构体 vs 联合体大小计算规则经典应用判断大小端枚举类型声明与赋值默认值规则枚举的优点使用方式三大自定义类型对比表总结1. 联合体共用体union联合体也叫共用体和结构体语法相似但内存管理完全不同。1.1 声明格式union 联合体名 { 成员列表; };示例union Un { char c; int i; };1.2 核心特点最重要所有成员共用同一块内存空间修改一个成员会直接覆盖其他成员的值地址完全相同un un.c un.iunion Un un; printf(%p\n, un); printf(%p\n, un.c); printf(%p\n, un.i);运行后你会发现三个地址一模一样1.3 结构体 vs 联合体struct各成员独立占用内存总大小 所有成员 内存对齐union所有成员共用内存大小由最大成员决定示例struct S { char c; int i; }; // 大小 8 union Un { char c; int i; }; // 大小 41.4 联合体大小计算规则大小至少 最大成员的大小大小必须是最大对齐数的整数倍示例 1union Un1 { char c[5]; // 大小5对齐数1 int i; // 大小4对齐数4 }; // 最大对齐数4 → 总大小为 8示例 2union Un2 { short c[7]; // 14字节对齐数2 int i; // 4字节对齐数4 }; // 最大对齐数4 → 总大小为 161.5 联合体经典面试题判断大小端利用 “成员共用内存” 的特性最简单的大小端判断法int check_sys() { union { int i; char c; }un; un.i 1; // 返回1→小端返回0→大端 return un.c; }✅ 小端低字节存低地址 →un.c 1✅ 大端高字节存低地址 →un.c 02. 枚举类型 enum2.1 枚举是什么枚举就是把有限、固定、可列举的值一一列出来比如星期、性别、颜色、状态、类型……2.2 声明格式enum 枚举名 { 枚举常量1, 枚举常量2, ... };示例enum Day { Mon, Tues, Wed, Thur, Fri, Sat, Sun };2.3 默认值规则默认从0开始后一个比前一个1支持手动赋初值示例enum Color { RED 2, GREEN 4, BLUE 8 };2.4 枚举的优点面试常问可读性极强看到RED就知道是红色有类型检查比#define更安全严谨便于调试#define 预处理会被直接替换一次定义一组常量使用方便遵循作用域不会到处污染2.5 枚举的使用enum Color { RED 1, GREEN 2, BLUE 4 }; // 使用 enum Color clr GREEN;C 语言允许用整数给枚举变量赋值C 不允许类型检查更严格3. 结构体 联合体 枚举 最全对比表直接放博客表格特性结构体 struct联合体 union枚举 enum关键字structunionenum内存特点成员独立占用内存所有成员共用同一块内存本质是int常量大小计算内存对齐总大小≥成员总和大小 最大成员大小且满足对齐大小等于int成员关系同时存在、互不干扰同一时间只用一个成员一组固定常量访问方式变量./ 指针-变量./ 指针-直接使用枚举常量适用场景描述对象的多个属性节省内存、类型转换、判断大小端状态标识、选项、固定取值典型例子学生、员工、书籍大小端检测、协议解析星期、性别、颜色、状态码4. 一句话总结结构体把多个属性打包在一起各自独立。联合体多个成员共用内存省空间、互斥使用。枚举定义一组有意义的常量代码更清晰、更安全。✨ 结尾鼓励联合体和枚举是 C 语言走向工程化、规范化编程的标志学会它们你的代码可读性、内存效率、专业度都会直接上一个台阶面试更是高频考点一定要吃透对你有帮助的话欢迎点赞、收藏、关注C 语言全套精讲持续更新

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价