一共用体的概念 当需要把不同类型的变量存放到同一段内存单元或对同一段内存单元的数据按不同类型处理则 需要使用共用体数据结构 例把一个整型变量一个字符型变量一个实型变量放在同一个地址开始的内存单元中 共用体的定义形式 union 共用体名 成员列表 变量列表 注意区分 共用体各成员占相同的起始地址所占内存长度等于最长的成员所占内存 结构体各成员占不同的地址所占内存长度等于全部成员所占内存之和
二共用体变量的引用 只能引用共用体变量的成员如 union data a; a.i; a.ch; a.f; 三共用体类型数据的特点 共用体变量中的值是最后一次存放的成员的值如 a.i = 1; a.ch = 'a'; a.f = 1.5; 完成以上三个赋值语句后共用体边量的值是 1.5而 a.i=1 和 a.ch='a'已无意义 共用体变量不能初始化例 union data { int i; char ch; float f; }a={1,'a', 1.5} 错误!!!
共用体常用来节省内存,特别是一些嵌入式编程,内存是非常宝贵的! 共用体也常用于操作系统数据结构或硬件数据结构! union在操作系统底层的代码中用的比较多,因为它在内存共赏布局上方便且直观。所以网络编程,协议分析,内核代码上有一些用到union都比较好懂,简化了设计。
妙用实例
1. 为了方便看懂代码。
比如说想写一个3 * 3的矩阵,可以这样写:
[ 注:下面用红色部分标记的地方是后来添加上去的,谢谢yrqing718的提醒!]
struct Matrix { union { struct { float _f11, _f12, _f13, _f21, _f22, _f23, _f31, _f32, _f33; }; float f[3][3]; }_matrix; }; struct Matrix m;
|