Skip to content

联合体

联合体union是一个能在同一个存储空间存储不同类型数据的类型;联合体所占的内存长度等于其最长成员的长度倍数,也有叫做共用体;同一内存段可以用来存放⼏种不同类型的成员,但每一瞬时只有一种起作用;共用体变量中起作用的成员是最后一次存放的成员,在存⼊一个新的成员后原有的成员的值会被覆盖;共用体变量的地址和它的各成员的地址都是同一地址。

联合体在实际开发中一般不经常使用。

c
#include <stdio.h>
#include <stdlib.h>

//共用体也叫联合体
union Test {
    unsigned char a;
    unsigned int b;
    unsigned short c;
};

int main(void) {
    //定义共用体变量
    union Test tmp;

    //1、所有成员的⾸地址是一样的
    printf("%p, %p, %p\n", &(tmp.a), &(tmp.b), &(tmp.c));

    //2、共用体⼤⼩为最⼤成员类型的⼤⼩
    printf("%lu\n", sizeof(union Test));

    //3、一个成员赋值,会影响另外的成员
    //左边是⾼位,右边是低位
    //低位放低地址,⾼位放⾼地址
    tmp.b = 0x44332211;
    printf("%x\n", tmp.a);//11
    printf("%x\n", tmp.c);//2211

    tmp.a = 0x00;
    printf("short: %x\n", tmp.c);//2200
    printf("int: %x\n", tmp.b);  //44332200

    return 0;
}

程序输出:

shell
0x7fffffffe3f8, 0x7fffffffe3f8, 0x7fffffffe3f8
4
11
2211
short: 2200
int: 44332200