联合体

一、联合体大小及定义

联合体_第1张图片       联合体又称共用体,联合体的特性就是内部所有成员共用一块内存,若要对联合体内部成员赋值,只能对第一个成员赋值,如果每个成员都赋值,最后一个值会覆盖之前的值,因为它地址相同,共用一块内存。

       联合体大小:找当前联合体内部字节数最多的,然后找当前占用字节最多的,注意内存对齐。

Union Time 中三个成员都为int类型,所以其大小为4

联合体_第2张图片         

        UU中字节数最多的是double,8个字节,但占用最多的是char str,9个字。     所以占用最多的是9个字节,考虑内存对齐时应与double对齐,所以是16个字节。

 

 

所以联合体的大小必须满足两个条件:

①大小足够容纳字节数最多的成员;

②大小能被其包含的所有基本数据类型的大小所整除;联合体_第3张图片

二、联合体有名字和没有名字的区别

如图是s1结构体中声明了有名共用体类型,s2结构体中没有定义共用体类型名

联合体如果只声明是不占内存的,由于c语言中空的结构体为1,所以s1求sizeof的值为1。s2求sizeof的值为4,也就是Union的大小。

三、联合体什么时候用、主要用途

想用同一块内存单元存放不同类型的变量,而且各数据类型各变量占用内存空间差不多并且各变量不会同时使用,即同一时刻值使用其中的一个成员变量时,可以使用联合体。

若是联合体中定义一个int arr[100]的数组,还有一个char类型的变量,这样内存空间差的太多则可以考虑用结构体struct!

你可能感兴趣的:(联合体)