「等位宣告」指定一組變數值,並選擇性地指定為等位命名聯集的標記。 變數值稱為等位的「成員」,而且可以有不同的類型。 等位類似於其他語言的「變體記錄」。
語法
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或函式類型。 因此,成員不能是聯集的實例,但可以是宣告之等位型別的指標。
等位型別宣告只是範本。 在宣告變數之前,不會保留記憶體。
備註
如果宣告了兩種類型的聯集,並儲存了一個值,但聯集會以另一種類型存取,則結果不可靠。 例如,宣告和 int 的float聯集。 值 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 特定內容