【C语言】——union共用体

    xiaoxiao2021-12-14  22

        union,C语言中使用比较少的一个东西,其实并不复杂。本质上来说,他和结构体是一样的,只是在包装角度看有些差异。

        形式

        union 共用体名{

        数据类型 成员名;

        数据类型 成员名;

        ...

        }变量名;

        

        特点

        1.共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。

        2.union中可以定义多个成员,union的大小由最大的成员的大小决定。

        3.对某一个成员赋值,会覆盖其他成员的值。

         当成员所占字节数不同时,只会覆盖相应字节上的值。例:char只占1个字节,而int占4个字节,则char类型数据只会覆盖int类型数据的低地址1字节。

        4.联合体union的存放顺序是所有成员都从低地址开始存放的。

         比如0x1234中,0x12是高地址,而0x34是低地址。

        实例

        有如下一段程序:

    #include <stdio.h> main() { union { char c; int i; float a; }test; test.i=0x1234; test.c='A'; printf("%x\n",test.i); }    程序运行结果:1241 

        程序中先给i赋值,再给c赋值,因为i为int类型,而c为char类型,所以,当在给c赋值之后,会赋值原来已有的i的值,但又不足以完全覆盖,从而得到运行结果。

        与结构体区别

        1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。

        2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。

        扩展

        union的赋值操作涉及到数据所占字符大小的问题,以下是在32位操作系统下的部分数据类型所占字节:

        1:整形

         int             4字节

         longint          4字节

         shortint          2字节

         unsignedint        4字节

         unsignedlong int     4字节

         unsignedshort int    2字节

        2:字符型

         char          1字节

         unsignedchar     1字节

        3:浮点型

         float        4字节

         double        8字节

         longdouble      8字节

         unsigned longdouble  8字节

         unsigneddouble      4字节     4:字符串型

         string     32字节

        5:指针类型

         所有类型的指针都是   4字节

        ......

    转载请注明原文地址: https://ju.6miu.com/read-970214.html

    最新回复(0)