联合(union)在许多其他语言中称作变体记录(variant record),在联合中 ,所有的成员都从偏移地址零开始存储,这样,每个成员的位置都会重叠在一起。
按照这种特性,联合可以把同一个数据解释成两种不同的东西,而不是把两个不同的数据解释为同一个东西,该用法的例子如下:
union bits32_tag {
int whole; //一个32位的值
struct { char c0, c1, c2, c3;} byte; //四个八位的字节
} value;
这个联合允许程序员提取整个32位值 (int),也可以提取单独的字节段如 value.byte.c0 等。
例如: value.whole = 0xa0fe728b; 因为所有的成员都从偏移地址零开始存储,则value.byte.c0 = (char)0x8b,其他的以此类推。