C语言学习--共用体 什么是共用体有时需要一种数据结构不同的场合表示不同的数据类型。比如如果只用一种数据结构表示学生的“成绩”这种结构就需要有时是整数80、90有时是字符A、B有时是浮点数80.5、60.5。C语言提供了共用体类型Union 结构用来自定义可以灵活变更的数据结构。它内部可以包含各种属性但同一时间只能有一个属性因为所有属性都保存在同一个内存地址后面写入的属性会覆盖前面的属性。这样做的最大好处是节省空间。“共用体”与“结构体”的定义形式相似但它们的含义是不同的。结构体变量所占内存长度可以认为是各成员占的内存长度的叠加每个成员分别占有其自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度几个成员共用一个内存区。定义共用体类型union 类型名称{成员类型 成员名称;成员类型 成员名称;成员类型 成员名称;成员类型 成员名称;成员类型 成员名称;....}注意类型名称和成员名称都需要符合标识符规范共用体体的成员类型可以是任意类型整数、浮点、数组、指针、枚举、结构体共同体变量初始化赋值// 先声明共同体变量再给其中一个成员赋值 union Score sc1; sc1.a A; // 同时定义共用体变量并初始化赋值给第一个成员赋值 union Score sc2 {C}; // 同时定义共用体变量并初始化赋值给指定成员赋值 union Score sc3 {.b 100};④ 共同体变量访问共同体成员使用 .⑤ 共用体指针访问共同体成员使用 -⑥ 共用体变量存储大小内存是最大成员的大小 所用成员共同的同一个内容空间一个时刻只有一个成员是有效的共用体赋值特点、赋值特点共用体所有成员共享同一块内存空间同一时刻只能有一个成员有效后赋值的成员会覆盖之前的值示例中先赋值sc1.aB再赋值sc1.b100最后赋值sc1.c98.13最终只有c的值有效内存覆盖机制当给sc1.b赋值99时仅修改最后4个字节不影响高位的浮点数存储浮点数的符号位和指数位未被修改因此sc1.c仍显示98.13typedef#define 类型别名与 typedef 类型别名的区别① 执行时机不同#define在预处理阶段执行typedef在程序运行阶段执行。② 类型检查#define只进行简单文本替换不作类型检查typedef在编译阶段会进行类型检查。③ 作用域#define设置的别名无作用域的概念typedef设置的别名具有作用域。① 基本类型别名typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; typedef unsigned long long u64;② 数组别名typedef int Int_array[]; typedef double Double_array5[5];③ 函数别名typedef double Avg_function(int, int);④ 指针别名// 给指向基本类型数据的指针起别名 typedef int *Int_ptr; typedef char *String; // 数组指针起别名 typedef int (*Int_arr_ptr)[]; // 函数指针起别名 typedef double (*Avg_function_ptr)(int, int);⑤ 结构体别名// 5.1 先定义结构体类型再取别名 struct User { char *name; int age; }; typedef struct User VipUser; // 5.2 同时定义结构体类型并取别名 typedef struct Person { char *name; int age; } Person; // 5.3 同时定义结构体类型并取别名且省略结构体类型名(强烈推荐) typedef struct { char *name; double score; } Student;⑥ 共用体别名// 6.1 先定义共用体类型再取别名 // 6.2 同时定义共用体类型和别名 // 6.3 同时定义共用体类型和别名省略共用体类型名(强烈推荐) typedef union { char a; double b; } Score;⑦ 枚举别名// 7.1 先定义枚举类型再取别名 // 7.2 同时定义枚举类型和别名 // 7.3 同时定义枚举类型和别名省略共用体类型名(强烈推荐) typedef enum { MALE, FEMALE, ELSE } Gender;

相关新闻

最新新闻

Python自动化实战:从杂乱文件夹改造,打造可变现副业自动化系统

Python自动化实战:从杂乱文件夹改造,打造可变现副业自动化系统

一、看似没什么用的重复类工作, 普通人搞钱的核心真相1.1里, 却暗藏着极大的商机。不少人在学习时步入了一个错误区域, 那就是一味地去钻研繁杂的算法以及高端的开发技巧, 然而却忽视了身旁最为贴近实际生活的赚钱机遇。在日常的办公情形当中, 整理文件, 清洗表格里面的数据, 统…

2026/8/27 10:23:02
802.11ax无线网络升级实践:从方案设计到性能调优全解析

802.11ax无线网络升级实践:从方案设计到性能调优全解析

最近刚完成了一个办公园区的无线网络升级项目,核心是把原来的802.11ac整体切到802.11ax(也就是大家常说的Wi-Fi 6)方案。整个项目从需求沟通、方案设计到落地验收,前后花了一个多月,中间踩了不少坑,也调出了…

2026/8/27 10:23:02
以下是 JSON Web Tokens 有用的一些场景

以下是 JSON Web Tokens 有用的一些场景

可免费得到JWT 手册, 去获取JWT 手册, 进而深入展开对JWT 的学习!什么是 JSON Web Token?JSON Web Token, 也就是JWT, 是一种开放标准, 如RFC 7519所规定, 它界定了一种紧凑且独立的途径, 用于经由JSON对象的形式, 在各方之间安全地传递信息, 此信息能够验证且值得…

2026/8/27 10:23:02
智能车竞赛技术实战:从传感器到PID控制,完整备赛经验总结

智能车竞赛技术实战:从传感器到PID控制,完整备赛经验总结

大学四年,哪个项目能让你同时把 C 语言、单片机、图像处理、自动控制、机械结构和现场调试全部过一遍?答案大概率是智能车竞赛。这次我们来看的,不是某个开源软件,而是一个硬件与算法深度绑定的实战项目,也是很多人大学…

2026/8/27 10:23:02
全栈工程师面试要求

全栈工程师面试要求

近段时间参与一个技术社区活动, 当讨论牵扯到“CTO的技术深度和广度到底哪一个更具重要性”的话题之际, 我忆起社区里时常被提及的“全栈工程师”的事务, 因而阐述了一些看法。现场未必能够做到清晰地表述, 所以诉诸笔端, 期望能够引发一些探讨, 防止年轻工程师步入错误的方向。…

2026/8/27 10:23:02
蓝屏上的那三十行

蓝屏上的那三十行

我活在两张5.25英寸软盘里。标签是蓝白相间的,上面印着"Turbo C 2.0",旁边有一行小字——"建议内存640KB"。那天有人把我插进A驱。咔嗒一声,金属挡片弹开,磁头开始读取。我感觉到自己的身体被逐字节地复制进一…

2026/8/27 10:18:02