C语言自定义类型:联合(共用体)

目录

前言

1、联合的定义

2、联合体特点

3、联合体大小计算

总结


前言

        本篇文章我们来讨论自定义类型:联合。

1、联合的定义

union Un
{
	int a;
	int c;
};

        如此定义出一个联合体。 

2、联合体特点

        联合体的大小:

        定义的联合体 union Un,它的大小为:4

        明明联合体里面放了两个int类型的变量,按理说两个int类型应该占8个字节,最后却只有4字节的大小。这是为什么呢?

        其实这就是联合体的特别之处,也是它和结构体的区别,联合体内的变量会共用一块空间,比如例子里面联合体内两个变量a和c,他们其实在内存中只占了4字节,共用那四个字节的空间。

        注意:这个空间至少是联合体内占最大空间的类型大小。

        这样做可以应用在什么情况呢?

        例如:我们有两个变量,我们能够肯定用到其中一个的时候用不到另外一个,这时候就可以用联合体将这两个变量定义在同一块空间中。

3、联合体大小计算

        联合体在计算大小时,存在对齐,并不一定是联合体内最大数据的空间大小:

        联合体的大小至少时最大成员的大小。

        当最大成员大小不是最大对齐数大小的整数倍的时候,就要对齐到最大对齐数的整数倍数。

例如:

union Un1
{
	char c[5];
	int i;
};

        这个联合体,定义了一个大小为5的字符串和一个大小为4的整型,最后这个联合体的大小为几呢?

        答案是:8。因为对于这里面最大的数据c来说,他有5字节大小,但是根据对齐原则,整个联合体的大小必须是对齐数的整数倍,对齐数在这里为4(详细讲解可以看我写的关于结构体的讲解文章),因此整个联合体的大小就为8。

总结

        联合体的内容就讲到这里,希望对大家有所帮助。

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值