union--共用体

文章介绍了C语言中union(共用体)的概念,它允许多种不同类型的变量共享同一块内存空间。在任何给定时间,只有一种类型的成员有值。文章通过示例解释了如何初始化共用体,以及如何通过赋值改变成员来影响其他成员的存储状态。此外,还强调了不能直接引用共用体变量以及不能比较两个共用体的特性。
摘要由CSDN通过智能技术生成

union--共用体

1.定义共用体类型变量的一般形式为:
union 共用体名
{
    成员表列
}变量表列;
2.
union Data
{
int i; //表示不同类型的变量i,ch,f可以存放到同一段存储单元中
char ch;
float f;
}a, b, c; //变量
在地址空间中表示如下图:
以上3个变量在内存中占的字节数不同,但都是从同一地址开始(图中设为1000)存放,也就是使用覆盖技术,后一个数据覆盖了前面的数据。
共用体类型数据的特点:
3.1
(1)同一内存段可以用来存放几种不同类型的成员,但在每一瞬间只能存放其中一个成员,而不是同时存放几个。
union Data
{
int i;        //表示不同类型的变量i,ch,f可以存放到同一段存储单元中
char ch;
float f;
}a, b, c;        //变量
a.i = 97;
表示将整数97存放在共用体变量中,输出结果如下。
因为float的存储方式不同,解码时会按照独自的方式计算解码(可自行搜索float类型数据在内存中的存储方式),所以输出为0.00000。
当a.f = 0x61;时,输出入下图:(打印a.ch时,因为0x0不能用字符打印,所以用的整型,效果一样)
存储方式为: 所以float类型97存储的十六进制为0x42C20000。
3.2
(2)可以对共用体变量初始化,但初始化表中只能有一个常量。
union Data
{
    int i;        //表示不同类型的变量i,ch,f可以存放到同一段存储单元中
    char ch;
    float f;
}a = {1,'a',1.5};              //不能初始化3个成员,他们占用同一段存储单元
union Data a = {16};           //正确,对第一个成员初始化
union Data a = {.ch = 'j'};    //C99允许对指定的一个成员初始化
3.3
(3)共用体变量中起作用的成员是最后一次被赋值的成员,在对共同体变量中的一个成员赋值后,原有变量存储单元中的值就被取代。
3.4
(4)共用体变量的地址和它的个成员的地址都是同一个地址。例如:&a.i,&a.ch,&a.f都是同一值。
3.5
(5)共用体类型可以出现结构体类型定义中,也可以定义共用体数组。结构体中也可以出现在共用体类型定义中,数组也可以作为共用体成员。
3.6
共用体变量不能直接引用。
3.7
改变共用体中的一个成员,就会改变整个共用体。
3.8
共用体在任意一个时刻,只有一个成员有意义。并且,对共用体变量赋值,在任意一个时刻只能对一个变量赋值。
3.9
4.0
不能用运算符==或!=来比较两个共用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值