共用方式為


union 聲明

「等位宣告」指定一組變數值,並選擇性地指定為等位命名聯集的標記。 變數值稱為等位的「成員」,而且可以有不同的類型。 等位類似於其他語言的「變體記錄」。

語法

struct-or-union-specifier
struct-or-union identifier 選擇{struct-declaration-list}
struct-or-union identifier

struct-or-union
struct
union

struct-declaration-list
struct-declaration
struct-declaration-list struct-declaration

聯集內容定義為

struct-declaration
specifier-qualifier-list struct-declarator-list ;

specifier-qualifier-list
type-specifier specifier-qualifier-list 選擇
type-qualifier specifier-qualifier-list 選擇

struct-declarator-list
struct-declarator
struct-declarator-list , struct-declarator

類型為的 union 變數會儲存該類型所定義的其中一個值。 相同的規則會控管結構和等位宣告。 等位欄位也可以有位欄位欄位。

等位的成員不能有不完整的類型、類型 void或函式類型。 因此,成員不能是聯集的實例,但可以是宣告之等位型別的指標。

等位型別宣告只是範本。 在宣告變數之前,不會保留記憶體。

備註

如果宣告了兩種類型的聯集,並儲存了一個值,但聯集會以另一種類型存取,則結果不可靠。 例如,宣告和 intfloat聯集。 值 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 個元素。 陣列的每個元素都是具有兩個成員的個別聯集: window1screenval。 成員 window1 是具有兩個位欄位成員 iconcolor的結構。 成員 screenvalint。 在任何指定時間,每個等位元素都會保留 intscreenval 表示的 或 所 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 特定內容

另請參閱

宣告子和變數宣告