一、联合体定义:
在IT领域中,联合体通常指的是一种数据结构,用于存储不同数据类型的组合体。在一些编程语言中,如C语言中的联合体(union),允许在同一块内存地址存储不同类型的数据。联合体中的所有成员共享同一块内存空间,这意味着每次只能存储其中的一个成员的值,节省内存空间。通过访
问不同的成员,可以在程序中实现对不同类型数据的灵活处理。
二、联合体的定义方式:
例如:
union MyUnion {
int a;
char b;
long c;
};
三、结构体的存储空间:
1、联合(union)是一种特殊的数据类型,它允许不同的数据类型共享同一块内存空间,只能同时存储其中一个成员的值。
2、 内存空间的大小为最大成员变量空间 ,但要注意内存对齐,可能要调整这个大小
例如:上述联合体,int类型为4字节,long int 类型为4字节,char类型为1字节,所以该联合体的内存空间为4字节。
3、对一个成员的赋值会影响到其他成员的值
四、联合体示例程序:
#include <stdio.h>
union MyUnion{
int num;
char c;
};
int main()
{
union MyUnion u = {0};
u.num = 97;
printf("%d\n",u.num);//32位二进制,最后8位01100001对应ascll码a
printf("%c\n",u.c);//
u.c = 'A';
printf("%d\n",u.num);
printf("%c\n",u.c);
u.num = 865;
printf("%d\n",u.num);//32位二进制0.....001101100001最后8位01100001十进制65
printf("%c\n",u.c);//对应ascll码a
return 0;
}
运行结果
97
a
65
A
865
a
五、面试题考点
代码示例:
#include <stdio.h>
typedef union{
long i;//C语言中的long类型通常占用4个字节或者8个字节,分别对应32位系统和64位系统。
int k[5];//int类型占用4个字节,因为存储5个int类型数据,所以总共占用5*4=20个字节
char c;//char类型占用1个字节
}DATE;
struct data
{
int cat;//4个字节
DATE cow;//DATE联合体占用20个字节
double dog;//double占用8个字节
}too;
int main()
{
//因为unit类型,每次只能存储其中的一个成员的值,所以成员空间是最大成员变量空间。
//最大成员变量为int k[5];占用20个字节
printf("%d\n",sizeof(DATE));
//结构体的内存空间大小是所有成员的总和,即4+20+8=32个字节
printf("%d\n",sizeof(too));
printf("%d\n",sizeof(struct data)+sizeof(DATE));//20+32=52个字节
return 0;
}
运算结果:
20
32
52