C零基础视频-42-共用体


视频地址: https://www.bilibili.com/video/av73896378

共用体的定义与使用

共用体的关键字是union,共用体是非基本数据类型,同结构体类似,我们需要先声明共用体类型,再利用自定义的类型去定义变量。

#include <stdio.h>
#include <string.h>

union MyUnion
{
    double dbWeight;
    int nID;
    char szName[8];
};

int main(int argc, char* argv[])
{
    MyUnion unionValue;
    unionValue.dbWeight = 3.14;
    unionValue.nID = 5;
    strcpy(unionValue.szName, "Jack");
    return 0;
}

共用体与结构体的比较

从以上的代码看,结构体与共用体的使用似乎非常相似:都是非基本数据类型,都需要先定义类型,再定义变量,都通过"."运算符取成员。
实则不然,它们最大的区别是:

  • 结构体最终占用的内存大小,是所有成员的相加的结果,各成员在内存中不重叠
  • 共用体最终占用的大小,按成员最大者计算,各成员共用内存

我们可以举生活中例子,比如我们有块公告板,公告板上每次会记录一条信息,但是信息的类型不同,有可能是:

  • 体重信息,double类型
  • 学号信息,int类型
  • 姓名信息,char数组类型

也就是说,三种情况都可能出现,但是不会同时出现。这就适合用共用体存放。

#include <string.h>

union MyUnion
{
    double dbWeight;
    int nID;
    char szName[8];
};

int main(int argc, char* argv[])
{
    MyUnion unionValue;
    unionValue.dbWeight = 3.14;
    printf("公告,体重:%f\r\n", unionValue.dbWeight);
    unionValue.nID = 5;
    printf("公告,学号:%d\r\n", unionValue.nID);
    strcpy(unionValue.szName, "Jack");
    printf("公告,姓名:%s\r\n", unionValue.szName);
    return 0;
}

我们也可以通过sizeof,来验证struct和union的不同。

#include <string.h>

union MyUnion
{
    double dbWeight;
    int nID;
    char szName[8];
};

struct MyStruct
{
    double dbWeight;
    int nID;
    char szName[8];
};

int main(int argc, char* argv[])
{
    printf("sizeof union:%d\r\n", sizeof(MyUnion));
    printf("sizeof struct:%d\r\n", sizeof(MyStruct));
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值