union
union A{ int i; char c; }a1;
如上的union会选择成员是
- 一个int i 或
- 一个char c
sizeof(union …) = sizeof(每个成员)的最大值
存储
- 所有的成员共享一个空间
- 同一时间只有一个成员是有效的
- union的大小是其最大的成员
- 初始化时会对第一个成员做初始化
union的用处
#include <stdio.h> typedef union { int i; char ch[sizeof(int)]; } CHI; int main() { CHI chi; chi.i = 1234; for(int i = 0; i <sizeof(int); i++) { printf("%02hhX",chi.ch[i]); } printf("\n"); return 0; }
运行结果为D2040000
这是为什么呢?
1234转化为16进制结果为00 00 04 D2,由于我使用的机器为基于X86架构的CPU,所以我的机器是一种小端的机器,低位在前高位在后,所以00 00 04 D2实际被存储为D2 04 00 00,所以我们的结果输出为D2040000。
我们可以通过这个方法得到一个整数内部的各个字节,同样也可以得到double等类型内部的各个字节,当我们要做文件操作时,当我们要把一个整数以二进制的形式写到一个文件里去的时候,都可以用这个方法来做读写的中间媒介。