(1)结构体
里面的数据各自有自己的存储空间,地址是连续的,结构体的大小等于各数据大小之和。
(2)联合体
所有数据共用一个内存空间,联合体的大小由字节数最大的那个数据决定。
#include <stdio.h>
struct Test{
char adata;
int bdata;
double cdata;
};
union TestU{
char adata;
int bdata;
char cdata;
};
int main()
{
struct Test t1;
union TestU u1;
printf("结构体的大小是:%ld\n",sizeof(t1));
printf("联合体的大小是:%ld\n",sizeof(u1));
printf("adata的地址是%p\n",&t1.adata);
printf("bdata的地址是%p\n",&t1.bdata);
printf("cdata的地址是%p\n",&t1.cdata);
u1.adata='a';
u1.bdata=99;
u1.cdata='c';
printf("adata=%d\n",u1.adata);
printf("adata的地址是%p\n",&u1.adata);
printf("bdata的地址是%p\n",&u1.bdata);
printf("cdata的地址是%p\n",&u1.cdata);
return 0;
}
要注意到,联合体会存在数据覆盖的问题,前面赋值的数据会被后面的赋值数据代替。