C语言的结构体和联合体区别

(1)结构体

        里面的数据各自有自己的存储空间,地址是连续的,结构体的大小等于各数据大小之和。

(2)联合体

         所有数据共用一个内存空间,联合体的大小由字节数最大的那个数据决定。

#include 



struct Test{

       char adata;
       int  bdata;
       double cdata;

};

union TestU{

       char adata;
       int bdata;
       char cdata;

};

int main()
{
    struct Test t1;
    union TestU u1;
    printf("结构体的大小是:%ld\n",sizeof(t1));
    printf("联合体的大小是:%ld\n",sizeof(u1));

    printf("adata的地址是%p\n",&t1.adata);
    printf("bdata的地址是%p\n",&t1.bdata);
    printf("cdata的地址是%p\n",&t1.cdata);

    
    u1.adata='a';
    u1.bdata=99;
    u1.cdata='c';
    printf("adata=%d\n",u1.adata);




    printf("adata的地址是%p\n",&u1.adata);
    printf("bdata的地址是%p\n",&u1.bdata);
    printf("cdata的地址是%p\n",&u1.cdata);




    return 0;
}

 

C语言的结构体和联合体区别_第1张图片

 要注意到,联合体会存在数据覆盖的问题,前面赋值的数据会被后面的赋值数据代替。

 

你可能感兴趣的:(联合体,c语言)