共用体知识总结


 提起结构体,我们可以想到它的一些特性,定义一个结构体,我们可以给其中放上不同类型的数据,他们分别占用不同的存储空间,所以一个结构体的数据所占内存就是各个数据的内存之和,这里还涉及到了内存对齐的问题,我在专门写结构体的那篇博客里面已经说过了,这里就不在赘述了。其实,还有一个和结构体很相似的内存类型,共用体。
 一看到它的名字,我们或许就已经知道一些    它的特性了,没错,它和结构体很相像,也可以在其中放入不同类型的数据,但是,有一个不同的地方就是,在共用体当中的数据共用这一段内存空间,所以,他们的存储地址都是相同并且固定不变的,刚刚接触到这个概念,其实我也很是迷惑,这到底应该如何存放数据呢,如果放进去三个数据甚至更多,这么大的数据内存空间更本就不够用啊,直到我更深入的了解到这个类型时,我才发觉到,共用体的设计真是太巧妙了,我在下面讲一讲我的理解吧。
       共用体确实是占用同一段内存空间,但是需要知道的是,整个内存空间必须是占用内存最大的数据的空间大小,这样才能保证数据可以正确的放在里面而不至于数据丢失。
     假设定义一个共用体如下
    
  union
{
    int i;
    char ch;
    float f;
}a,b,c;


    共用体的几个特点
1.共用体总是存储最后一个数据的值,因为在共用体中每一瞬间只能存放其中一个成员,而不是同时存放几个。为什么会是这样呢,浅显的说,在每一个存储的瞬间,存储单元只能有唯一的内容,在共用体变量中只能存一个值,所以可以说是共用体存在内存覆盖,不管有多少个数据,只会存放最后一个元素的值,原有的值会被取代。
2.由于共用体的第一个性质,所以对共用体进行初始化的时候,在初始化表中只能有一个变量,我在下面举几个例子
union Data
{
   int i;
   char ch;
   float f;
}a={1,'a',1.5};   //错了,占用同一段存储单元
union Data a={16}; //正确,对第一个成员进行初始化
union Data a={.ch='j'}; //可以对指定的成员进行初始化


3.不能对共用体进行赋值,也不能通过引用变量名来得到一个值
举两个错误的例子
1.a=1  这样不知道给哪一个赋值,所以错了
2.m=a  不能通过引用变量名得到一个值赋给整型变量m
但是,可以对两个同类型的共用体进行赋值
比如   a=b;  这样是完全可以的,这一点又和结构体有异曲同工之妙
   特别注意
   只有先定义了共用体变量才可以引用它,但是,不能引用共用体变量,只能引用共用体变量中的成员
   a.i   (引用共用体变量中的整型变量i)
   a.ch   (引用共用体变量中的字符变量ch)
   a.f    (引用共用体变量中的实型变量f)

 
 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值