C語言中文網 目錄

C語言結構類型的定義

結構類型是在程序中定義的類型,以指定記錄的格式,它包括成員名稱和類型,以及成員在內存中的存儲次序。一旦定義了結構類型,就可以像使用其他所有類型一樣使用這種結構類型,可以聲明具有這種結構類型的對象,定義指向這種對象的指針,以及定義具有這種結構類型元素的數組。

結構類型的定義從關鍵字 struct 開始,大括號內包含聲明結構成員的列表

struct [標簽名稱] {成員聲明列表};


結構必須包含至少一個成員。下面的例子定義了 struct Date 類型,它有 3 個 short 類型的成員:
struct Date { short month, day, year; };

標識符 Date 是該結構類型的標簽(tag)。標識符 year、month 和 day 是成員名稱。結構類型的標簽屬于一個不同的命名空間:即使結構標簽與變量名或函數名相同,編譯器也仍然可以區分。類似地,對于每個結構類型,其中的每個結構成員名稱都屬于不同的命名空間。

結構的成員,可以定義為任何所需的完整類型,包括之前已定義的結構類型。但是不能是長度可變的數組,或者指向長度可變數組的指針。

下面的結構類型 struct Song 有 5 個成員,可以存儲關于音樂記錄的5種信息。成員 published 的類型是 struct Date,這正是前面的例子中所定義的結構類型:
struct Song { char title[64];
              char artist[32];
              char composer[32];
              short duration;    // 播放時間(秒)
              struct Date published;     // 出版日期
           };

結構類型無法將自己的類型作為其成員的類型,因為自己的類型定義尚不完整,要在結束的大括號(})后才算定義完整。然而,結構類型可以包含指向自己類型的指針,這樣的應用很常見。例如,在實現鏈表(linked list)和二叉樹(binary tree)時,就會用到這種自引用結構(self-referential structure)。下面的例子為一個單向鏈表成員定義了一個類型:
struct Cell { struct Song song;        // 這條記錄的數據
              struct Cell *pNext;        // 指向下一條記錄的指針
            };

如果在多個源代碼文件中使用同一個結構類型,應該將它的定義放在頭文件中,再在各個源代碼文件中包含該頭文件。通常,同一個頭文件中也會定義操作該結構類型的函數原型。那么,在所有包含給定頭文件的源代碼文件中,均可以使用該結構類型及其對應的操作函數。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo