等位宣告
「 聯集的宣告 」 會指定一組的變數值,並選擇性地標記命名聯集。 變數的值則稱為 「 成員 」 的聯集,並可以具有不同的型別。 等位會類似於在其他語言的 「 變異記錄 」。
語法
結構或位等位的規範:
結構或等位的識別項選擇**{** 結構宣告清單**}**結構或等位的識別項
結構或等位:
structunion
結構宣告清單:
結構宣告結構宣告清單結構宣告
聯集的內容會定義為
結構宣告:
規範式的辨識符號清單結構宣告子清單**;**規範式的辨識符號清單:
型別規範規範限定元清單opt型別限定詞規範限定元清單opt
結構宣告子清單:
結構宣告子結構宣告子清單**,** 結構宣告子
變數與等位型別會儲存該型別所定義之值的其中一個。 相同的規則會控制結構和等位宣告。 也有的等位元欄位。
等位的成員不能有不完整的型別,輸入void,或函式型別。 因此成員不能成為其實例的聯集,但可以是指標被宣告的等位型別。
聯集的型別宣告是只有一個範本。 變數宣告之前,未保留的記憶體。
注意事項 |
---|
如果兩個型別的等位宣告,並儲存一個值,但聯集與另一個型別存取,則結果會是不可靠。比方說,葛浮點數和int宣告。A 浮點數值會儲存,但程式稍後存取的值為int。在這種情況下,值而定的內部儲存體浮點數的值。將不可信賴的整數值。 |
範例
聯集的範例如下:
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陣列包含 2000 項目。 陣列中的每個元素是個別的聯集含有兩個成員: window1和screenval。 window1成員是一種結構含有兩個的位元欄位成員, icon和color。 The screenval member is an 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 特定