联合体union的个人使用心得

1.union联合体的特点

 一、成员首地址相同,也就是通过不同的成员访问会从相同的起始地址开始取数据,至于取多少个地址的数据取决于具体成员的类型。

    下面使用一段简单的代码验证:

  

    执行的结果如下:


共用体:共用内存首地址,可以使用其拥有的所有变量名对内存进行访问与修改。

二、union内存空间的分配按照其占用内存最大的成员来进行分配

    下面使用一个例子来说明:

 

    输出的结果:


    

2.union的优缺点与使用场合

    共用体可以有很多的访问内存的手段,使用起来非常灵活,但是不同的访问之间没有互相进行屏蔽,这有时候会导致逻辑上的错误,比如成员占用的地址不一样多时,访问可能会导致乱码的情况。

    联合体的内存是按照成员占用的最大内存来分配的,相比于struct,这种union的使用场合,是各数据类型各变量占用空间差不多的场合,比如一个数组(int a[100]),和一个或者几个小变量写在一个union里,实在没什么必要,节省的空间太有限了,还增加了一些风险(最少有前边提到的逻辑上的风险)。某些情况下虽然不是很节约内存空间,但是union的复用性优势依然存在啊,比如方便多命名。根据union固定首地址union按最大需求开辟一段内存空间两个特征,可以发现,所有表面的定义都是虚的,所谓联合体union,就是在内存给你划了一个足够用的空间,至于你怎么玩~它不管~!

    联合体在大小端中的使用:


    结果如下:


上边示范了一种用途,代表四个含义的四个变量,但是可以用一个int来操作,直接int赋值,无论内存访问(指针大小的整数倍,访问才有效率),还是时间复杂度(一次和四次的区别,而且这四次有三次都是非对齐的地址),都会低一些。具体大小端视自己的机器而定。

猜你喜欢

转载自blog.csdn.net/wenlong_l/article/details/80766576
今日推荐