zoukankan      html  css  js  c++  java
  • C/C++:Unions 联合

    原文:http://msdn.microsoft.com/en-us/library/5dxy4b7b(v=vs.80).aspx


    联合是用户定义的数据或类类型,在任何时间里,它只包含成员列表中的一个对象(当然,对象可以是数组或者类类型)。


    union [tag] { member-list } [declarators];
    [union] tag declarators;


    参数

    tag

    联合的类型名字。

    member-list

    联合所包含的数据类型列表,参考备注部分。

    declarators

    声明列表指明联合的名字。更多信息,浏览声明符概览


    备注

    联合的成员列表反应联合所能包含的数据的种类。一个联合要求足够的存储空间,以保存成员列表中的最大成员。更多信息,参考 声明联合(C语言参考)

    声明联合

    在开头使用关键字 union,使用花括号包围成员列表:

    // declaring_a_union.cpp
    union DATATYPE    // 声明联合类型
    {
        char   ch;
        int    i;
        long   l;
        float  f;
        double d;
    } var1;          // 声明可选的联合变量(可以是多个)
    
    int main()
    {
    }


    使用联合

    C++联合是类类型的有限形式。它可以包含访问修饰符(public, protected, private),成员数据,和成员函数,包括构造和析构函数。它不能包含虚拟函数或静态数据成员。不能被使用为基础类,也不能有基类。在联合中的访问默认是public的。

    在C中,必须使用union关键字来声明一个联合变量。在C++中,union关键字不是必需的:


    union DATATYPE var2;   // C声明联合变量
    
    DATATYPE var3;         // C++声明联合变量

    联合类型的变量可以保存联合中声明的任何类型的一个值。使用成员选择操作符(.)访问联合的成员:

    var1.i = 6;           // 变量是整数
    var2.d = 5.327;       // 变量是双精度


    你可以在声明联合的同时,使用赋值表达式(包含在括号内)进行初始化。 表达式被计算成值并赋给联合的第1个字段。


    举例


    // using_a_union.cpp
    #include <stdio.h>
    
    union NumericType
    {
        int         iValue;
        long        lValue;  
        double      dValue;  
    };
    
    int main()
    {
        union NumericType Values = { 10 };   // iValue = 10
        printf_s("%d
    ", Values.iValue);
        Values.dValue = 3.1416;
        printf_s("%f
    ", Values.dValue);
    }


    输出

    10

    3.141600

    数值类型的联合在内存中的排列(原理性)如下图所示:


    数值类型联合的数据存储


    注:

    可以看到,分配的最大的数据类型的空间。

    如果,有a[100]的成员,就会分配4*100(如int大小为4)。

  • 相关阅读:
    2021年4月1日
    2021年3月31日
    2021年3月30日
    2021年3月29日
    2021年3月27日
    2021年3月26日
    2021年3月25日
    人件集阅读笔记03
    2020年3月24日
    构建之法阅读笔记02
  • 原文地址:https://www.cnblogs.com/aukle/p/3220339.html
Copyright © 2011-2022 走看看