联合声明

联合 “说明”指定为该联合的设置值,因此,可选择,标记。 变量值称为 “成员”的该联合,并可能具有不同的类型。 联合类似于 “不同的记录”在其他语言。

语法

  • 结构或联合说明符:
    结构或联合标识符opt**{** 结构声明列表 }

    结构或联合标识符

  • 结构或联合:
    struct

    union

  • 结构声明列表:
    结构声明

    结构声明列表结构声明

联合内容被定义为

  • 结构声明:
    说明符限定符列表结构公告列表 ;

  • 说明符限定符列表:
    类型说明符说明符限定符列表 opt

    类型限定符说明符限定符列表 opt

  • 结构公告列表:
    结构声明

    结构公告列表 结构声明

联合 类型的变量存储该类型定义的值之一。 相同规则控制结构和联合说明。 联合还可以位的字段。

联合的成员不能包含不完整类型、类型 void或函数类型。 因此成员不是该联合的实例,但是可以是指向声明的联合类型。

联合类型声明为仅针对模板。 内存不是保留的关键字,将变量声明为。

备注

如果两个类型的联合声明,并存储一个值,但是,该联合获取与另一个类型,结果是不可靠。例如, float 和 int 联合声明。float 值存储,但是,程序最新访问该值作为 int。在这种情况下,值取决于 float 值内部存储。整数值将不可靠。

示例

下面是联合的示例:

union sign   /* A definition and a declaration */
{
    int svar;
    unsigned uvar;
} number;

此示例定义了 sign 类型的联合变量并声明具有两个成员的变量被命名为 number : svar,一个带符号整数和 uvar,无符号整数。 此声明允许 number 的当前值存储为带符号或无符号值。 标记与此联合类型是 sign。

union               /* Defines a two-dimensional */
{                   /*  array named screen */
    struct    
    { 
      unsigned int icon : 8;  
      unsigned color : 4;
    } window1;
    int screenval;
} screen[25][80];

screen 数组包含 2,000 个元素。 数组的每个元素与两个成员的单个联合: window1 和 screenval。 window1 成员是具有两位域成员、 icon 和 color的结构。 screenval 成员是 int。 在任意给定时间,每个联合元素保留 int 由 screenval 或 window1表示的结构。

Microsoft 专用

,可在另一个结构或联合的成员时,嵌套的联合可以声明匿名。 这是一种无名的联合的示例:

struct str
{
    int a, b;
    union            / * Unnamed union */
    {
      char c[4];
      long l;
      float f;
   };
   char c_array[10];
} my_str;
.
.
.
my_str.l == 0L;  /* A reference to a field in the my_str union */

联合包含在给定数据类型的一个字段在特定时间都包含一个联合的结构中经常嵌套。 这是一个声明的示例这样联合的:

struct x
{
    int type_tag;
    union
    {
      int x;
      float y;
    }
}

有关引用联合的信息,请参见 结构和联合成员

特定于 Microsoft 的结尾

请参见

概念

声明和变量声明