嵌入式-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 @ 2022-11-06 21:58  WellMandala  阅读(103)  评论(0编辑  收藏  举报