有时候同一块内存空间存放类型不同,不同类型的变量共享一块空间。
结构体和共用体的区别:
(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的大小内存分配。
标签:联合体,嵌入式,125,printf,C语言,data1,data3,data2 From: https://www.cnblogs.com/zxtang/p/16864317.html