相同类型的数据集合在一起可以用数组;--->每个成员占用不同的内存空间
不同类型的数据集合在一起可以用结构体;--->每个成员占用不同的内存空间
不同类型的数据放在同一段内存单元上,使用共用体。--->每个成员占用同一段的内存空间----->省内存空间
例如:结构体
struct student{
char name[10];
int age;
float length;
};
共用体:
union student{
char name[10];
int age;
float length;
};
共用体所占内存字节数与其成员中占字节数最多的那个成员相等。
共用体变量不能进行初始化;
只能对成员进行单独赋值:
union student stt;
stt.age = 19;
stt.length = 1.76;
printf("%d",stt.age);------------------->最后的值,是length成员的值,故会将1.76 取整,
共用体只能引用共用体变量的成员。有三种形式:
共用体变量名.成员名
共用体指针->成员名
(*共用体指针).成员名
共用体变量中起作用的是最近一次存入的成员变量的值,原有的成员变量的值将被覆盖。
例如:
利用共用体取出int变量的高字节和低字节的数据
union student{
int a;
char ch[2];
}stt;
stt.a=0x4321;
printf("%x,%x",ch[0],ch[1]);
通信中的数据包会用到共用体。
因为不知道对方会发一个什么包过来,用共用体的话就很简单了,定义几种格式的包,收到包之后就可以直接根据包的格式取出数据。