嵌入式-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的大小内存分配。

 

posted @   WellMandala  阅读(122)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示