【c语言】Union共用体

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ


结构体 知识点:【c语言】结构体详解


一、共用体union

共用体:所有成员共享一段存储空间,但每个时间只有一个成员在使用

在这里插入图片描述

共用体的定义格式:

与结构体相似,union 类型名 { 不同数据类型 }

union aa
{
	int a;
	char b;
} ;

由于共用体中所有成员共享同一段内存空间,只有一个成员处于激活状态。因此,在读取或修改共用体中某个成员时,要确保该成员当前是处于激活状态的成员。

将65赋值给整型成员a之后,可以通过字符b读取它的ASCII码对应的字符值。

在这里插入图片描述

二、过程原理:

你认为下面的代码输出结果是什么?

在这里插入图片描述

#include <stdio.h>
#include <string.h>
 
union Data
{
   int i;
   float f;
   char  str[20];
};
 
int main()
{
   union Data data;        
 
   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "TianXi Studio");
 
   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);
 
   return 0;
}

通过调试器一步步查看:

未赋值前:

在这里插入图片描述

运行到data.i = 10 给i赋值后:

在这里插入图片描述

给 f 赋值后:

在这里插入图片描述

运行到字符串复制后:

在这里插入图片描述

最后一次使用共用体的成员,输出的值就是最后一次的值

在使用共用体时要注意只有一个成员处于激活状态,最后一次对共用体的任何成员操作都会影响这个激活状态的成员

在这里插入图片描述

如果在之前的aa共用体中的例子中添加一句:

在这里插入图片描述

运行结果就是成员b对共用体的操作,结果是输出一个 B 字符。

因此在使用共用体时,需要注意成员的切换和使用。

三、结构体和共用体的区别


结构体知识点:【c语言】结构体详解


结构体是由多个不同类型的数据组成的一个新数据类型,可用于存储和访问相互关联的数据。

共用体是多个不同类型的变量共享同一个内存空间。

结构体中的每个成员都有独立地址,而共用体成员则有相同地址,任何时刻只有一个成员处于激活状态
结构体内存的大小取决于其成员的总和
共用体内存的大小等于最大成员变量的大小

在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言中的共用体Union)和位域(Bit-Field)是用来优化内存使用和灵活操作数据的工具。 共用体是一种特殊的数据类型,它允许不同的变量共享同一块内存空间。共用体中的成员变量共享同一内存,占用内存大小等于最大成员的大小。通过修改共用体的一个成员变量的值,可以影响到其他成员变量的值。共用体适用于在不同的数据类型之间进行转换或者存储占用内存大小不定的数据。 位域是一种特殊的结构体成员变量,可以指定成员变量占用的位数,从而实现对内存空间的灵活利用。位域的成员变量必须是整型数据类型,并且位域的大小不能超过该整型类型的大小。位域可以用于减小数据结构占用的内存大小,以及进行数据的位操作。 共用体和位域结构体可以一起使用。通过在位域结构体中定义共用体成员变量,可以实现对内存的灵活使用和数据的高效操作。共用体可以用于存储不同类型的数据,而位域可以用于压缩数据的存储空间。这种结合使用的方式可以为我们的程序带来更加高效和节省内存的特点。 总结起来,C语言中的共用体和位域结构体提供了一种优化内存使用和操作数据的方式。它们可以灵活地对内存空间进行利用,并且能够高效地操作数据。通过合理的使用共用体和位域结构体,我们可以达到节省内存和提高程序执行效率的目的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天喜Studio

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

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

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

打赏作者

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

抵扣说明:

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

余额充值