等位
A 等位是使用者定義資料或類別型別,在任何時候,包含其清單中的成員只能有一個物件 (雖然該物件可以是陣列或類別型別)。
union [tag] { member-list } [declarators];
[union] tag declarators;
參數
tag
指定要進行聯集型別名稱。member-list
可以包含的聯集的資料型別的清單。請參閱<備註>。declarators
指定名稱的聯集的宣告子清單。如需詳細資訊,請參閱 多個宣告的概觀。
備註
成員清單的聯集表示 [聯集可以包含的資料種類。等位需要儲存空間不足,無法容納最大的成員在其成員清單。如需詳細資訊,請參閱等位宣告 (C 語言參考)。
宣告等位
開始的聯集的聯集的關鍵字宣告,並將成員清單括在大括號:
// declaring_a_union.cpp
union DATATYPE // Declare union type
{
char ch;
int i;
long l;
float f;
double d;
} var1; // Optional declaration of union variable
int main()
{
}
使用 [聯集
C + + 等位是有限的一種類別的型別。它可以包含存取規範 (公開,受保護、 私用)、 成員資料,以及成員函式,包括建構函式和解構函式。它不能包含虛擬函式或靜態資料成員。不能當做基底類別,也不可以有基底類別。預設的等位中的成員的存取權是公用的。
C 的等位型別可以只包含資料成員。
在 c 中,您必須使用等位關鍵字來宣告等位的變數。在 C++ 中, 等位不是必要的關鍵字:
union DATATYPE var2; // C declaration of a union variable
DATATYPE var3; // C++ declaration of a union variable
等位型別的變數可以保留一個值宣告的等位中的任何型別。使用 [成員選取運算子 (.) 來存取等位的成員:
var1.i = 6; // Use variable as integer
var2.d = 5.327; // Use variable as double
可以同時宣告和初始化等位在相同的陳述式中指定的大括號括住的運算式。運算式評估並指派給 [聯集的第一個欄位。
範例
// 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\n", Values.iValue);
Values.dValue = 3.1416;
printf_s("%f\n", Values.dValue);
}
Output
10
3.141600
NumericType等位排列在記憶體中 (在概念上) 如下圖所示。
NumericType 等位中的資料儲存的