結構宣告
"結構宣告 」 時,命名型別,並指定一連串的變數值 (稱為 「 成員 」 或 「 欄位 」 的結構) 可以有不同類型。 選擇性的識別項,稱為 「 標籤 」,提供結構的型別名稱,並可在結構型別之後續參考。 該結構的型別的變數會保留該型別所定義的整個順序。 在 c 中的結構會類似於型別,稱為 「 記錄 」,以其他語言。
語法
結構或位等位的規範:
結構或等位的識別項選擇**{** 結構宣告清單**}**結構或等位的識別項
結構或等位:
structunion
結構宣告清單:
結構宣告結構宣告清單結構宣告
結構的內容會定義為
結構宣告:
規範式的辨識符號清單結構宣告子清單**;**規範式的辨識符號清單:
型別規範規範限定元清單opt型別限定詞規範限定元清單opt
結構宣告子清單:
結構宣告子結構宣告子清單**,** 結構宣告子
結構宣告子:
declarator
宣告為結構型別並不會設定保留為結構的空間。 它是結構變數的較新的宣告的範本。
預先定義的 a 識別項 (標記) 可以用來參考其他地方定義為結構型別。 如此一來, 結構宣告清單 ,只要該定義是看得見不可重複。 結構和 typedef 結構型別指標的宣告結構的型別定義之前,可以使用結構的標籤。 不過,結構的定義必須是之前發生任何實際使用的欄位大小。 這是不完整的定義了型別和類型的標籤。 無法完成此定義,型別定義必須出現稍後在相同的範圍。
結構宣告清單指定的型別和結構成員的名稱。 A 結構宣告清單引數中包含一個或多個變數的位元欄位宣告。
每個變數宣告於結構宣告清單定義為結構型別的成員。 區域變數宣告內結構宣告清單擁有在這個章節中討論的其他變數宣告為相同的格式,不同之處在於宣告不能儲存類別規範或初始設定式。 結構成員可以擁有任何變數的型別,型別除了void,不完整的型別或函式型別。
若要讓它出現的結構的型別,不可以宣告成員。 不過,您還可以成員宣告為變數的指標,它出現前提是結構型別已標記的結構型別。 這可讓您建立的結構的連結的串列。
結構中,請依照下列的相同範圍設定為其他識別項。 結構的識別項必須是不同於其他的結構、 等位,以及使用相同的可視性的列舉型別標記。
每個結構宣告 在 結構宣告清單清單中必須是唯一。 不過,識別項名稱中結構宣告清單不必有所分別從一般變數的名稱或從其他結構宣告清單中的識別項。
也可以存取巢狀的結構,就好像它們在檔案範圍層級宣告。 例如,給定此宣告:
struct a
{
int x;
struct b
{
int y;
} var2;
} var1;
這些宣告是合法的兩個:
struct a var3;
struct b var4;
範例
這些範例所示結構宣告:
struct employee /* Defines a structure variable named temp */
{
char name[20];
int id;
long class;
} temp;
The employee structure has three members: name, id, and class. name成員是 20 個元素陣列,以及id和class是簡單的成員,與int和長分別輸入。 識別項employee為結構的識別項。
struct employee student, faculty, staff;
這個範例會定義三個結構變數: student, faculty,以及staff。 每個結構都有相同的三個成員的清單。 成員的宣告有結構型別employee,已定義在先前的範例。
struct /* Defines an anonymous struct and a */
{ /* structure variable named complex */
float x, y;
} complex;
complex結構中有兩個成員具有浮點數型別, x和y。 結構型別有沒有標記,因此未具名或匿名。
struct sample /* Defines a structure named x */
{
char c;
float *pf;
struct sample *next;
} x;
前兩個結構的成員是char變數,變數的指標, 浮點數的值。 第三個成員中, next,被宣告為變數的指標,所定義的結構類型 (sample)。
標籤不在需要時,匿名結構會很有用。 當一個宣告會定義所有的結構執行個體時,就是這樣。 例如:
struct
{
int x;
int y;
} mystruct;
內嵌的結構通常是匿名的。
struct somestruct
{
struct /* Anonymous structure */
{
int x, y;
} point;
int type;
} w;
Microsoft 專有的
編譯器會允許將可變大小,或按一下 [大小為零的陣列做為結構的最後一個成員。 這可能是如果常數陣列的大小不同,當使用在各種情況下很有用。 這種結構的宣告看起來像這樣:
struct 識別項**{** 集合的宣告 輸入陣列名稱**[];} ;**
僅做為結構的最後一個成員,會將可變大小的陣列。 結構,其中包含將可變大小的陣列宣告可以是巢狀內其他結構,只要沒有進一步的成員任何封入的結構中宣告的。 不允許這種結構的陣列。 sizeof運算子,當套用到此型別的變數或型別本身,假設陣列的大小為 0。
也可以將結構宣告指定不宣告子的情況下,在另一個結構或等位的成員時。 封入的結構所升級的欄位名稱。 比方說,沒有名稱的結構看起來像這樣:
struct s
{
float y;
struct
{
int a, b, c;
};
char str[10];
} *p_s;
.
.
.
p_s->b = 100; /* A reference to a field in the s structure */
請參閱結構和等位的成員如需有關結構的參考資訊。
結束 Microsoft 特定