嵌入式-C语言基础:联合体和共用体的概念

2022-12-28,,,,

有时候同一块内存空间存放类型不同,不同类型的变量共享一块空间。

结构体和共用体的区别:

(1)结构体元素有各自单独空间,共用体元素共享空间,空间大小由最大类型确定。

(2)结构体元素互不影响共用体赋值会导致覆盖。

#include<stdio.h>
#include<string.h> struct TestT
{
int data1;//4
char data2[125];//125
double data3;//8
}; union TestU
{
int data1;//4
char data2[125];//125
double data3;//8
}; int main()
{
struct TestT t;
union TestU u;
printf("结构体的大小=%d\n",sizeof(t));
printf("data1:%p\n",&t.data1);
printf("data2:%p\n",&t.data2);
printf("data3:%p\n",&t.data3);
printf("联合体的大小=%d\n",sizeof(u));
printf("data1:%p\n",&u.data1);
printf("data2:%p\n",&u.data2);
printf("data3:%p\n",&u.data3);
return 0;
}

输出结果:

结构体的大小=144
data1:000000000061FD90
data2:000000000061FD94
data3:000000000061FE18
联合体的大小=128
data1:000000000061FD10
data2:000000000061FD10
data3:000000000061FD10
输出的结构体和联合体的大小貌似有点难以理解的地方,其实这里涉及到一个字节对齐的问题,即C语言默认是8字节对齐,即以8个字节为一个单位,不满8个字节的,还是会给你按照8个字节的内存大小来计算,所以结构体的大小就是8(4不满8,按照8来计算)+128(125+3)+8=144;联合体最大变量大小为125,会按照128的大小内存分配。

嵌入式-C语言基础:联合体和共用体的概念的相关教程结束。

《嵌入式-C语言基础:联合体和共用体的概念.doc》

下载本文的Word格式文档,以方便收藏与打印。