嵌入式-C语言基础:联合体和共用体的概念
有时候同一块内存空间存放类型不同,不同类型的变量共享一块空间。
结构体和共用体的区别:
(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的大小内存分配。
4556
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构