共同体union:
使几个不同类型的变量共占一段内存。
之间可以相互覆盖。
内存大小取最长变量的长度。
赋值时,由于共用一段内存,所以会对其他变量成员重写。
结构体struct:
不同数据整合成一个整体。
每个变量都有自己的内存空间。
内存大小为所有变量所占内存之和。
举个栗子:
#include <stdio.h> typedef union {//定义一个联合 int i; struct { char first; char second; } half; } number; int main() { number number; number.i = 0X4241;//联合成员赋值 printf("%c%c\n", number.half.first, number.half.second); number.half.first = 'a'; //联合中,结构成员赋值 number.half.second = 'b'; printf("%x\n", number.i); return 0; }
输出结果为:
AB
6261
分析:
在这里i和half结构是共用内存
number.i=0X4241 给i赋值后,内存中以二进制存储 0100 0010 0100 0001
按顺序对应到结构中
half.first=0100 0010 转换成十进制就是66 (字母A的asc码)
half.second=0100 0001 转换成十进制就是65 (字母B的asc码)
所以输出是AB