联合体和结构体类似但又不同,C语言中的联合体(Union)是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。联合体提供了一种方式,使得不同的数据类型可以共享同一段内存空间。但是,在任何给定的时刻,联合体只能存储它的成员之一的值;即联合体的所有成员从相同的内存地址开始。
联合体的声明
联合体使用union
关键字来声明,后跟联合体的名称和它的成员列表,成员列表用花括号{}
括起来,成员之间用逗号,
分隔。
union TestU{
int idata;
char cdata;
double ddata;
};
在这个例子中,TestT
是一个联合体,它可以存储一个int
、一个char或者一个double变量。但是,在任何时候,它只能存储这三种类型之一的值。
联合体的大小
联合体的大小至少是足够存储它最大成员所需的空间。由于联合体的所有成员都从相同的内存地址开始,因此它的总大小不会是所有成员大小的总和,而是它最大成员的大小。
#include<stdio.h>
struct TestT{
int idata;
char cdata;
double ddata;
};
union TestU{
int idata;
char cdata;
double ddata;
};
int main()
{
struct TestT t1;
union TestU u1;
printf("结构体t1的大小是:%d\n",sizeof(t1));
printf("联合体u1的大小是:%d\n",sizeof(u1));
return 0;
}
输出将是: