設計程式時,最重要的步驟之一就是選擇表示資料的方法。在許多情況下,簡單變數甚至是陣列還不夠。為此,c提供了結構變數(structure variable)提高表示資料的能力,它能夠創造新的形式。
需求:需要列印乙份圖書目錄。裡面包含每本書的各種資訊:書名、作者、出版社、版權日期和**。其中一些元素(例如書名和作者)可以儲存在字元陣列中,其他專案需要乙個int或者float。如果使用5哥不同的陣列分別記錄每一項都比較繁瑣,尤其是要建立多份列表:乙份按書名排序、乙份按作者排序、乙份按照**排序等。如果能把圖書目錄的資訊都包含在乙個陣列裡更好,其中每個元素包含一本書的相關資訊。
因此,就需要一種既能包含字串也能包含數字的資料形式,而且還要保持各資訊的獨立。結構體就滿足這種情況下的需求。
struct book
int main (void)
// output
請輸入書名:《c primer plus》
請輸入出版社:人民郵電出版社
請輸入出版日期:201604
請輸入**:59.4
結構宣告(structure declaration)描述了乙個結構的組織布局。宣告類似下面這樣:
struct book
該宣告描述了乙個由兩個字元陣列和乙個float型別變數組成的結構。該宣告並未建立實際的資料物件,只描述了該物件由什麼組成。
分析下,首先是關鍵字struct,它表明跟在其後的是乙個結構,後面是乙個標記 (例子為book),我們可以使用該標記引用該結構。所以,我們可以在後面的程式中這樣宣告:
struct book book1;
這把book1宣告為乙個使用book結構布局的結構變數。
在結構宣告中,用一對花括號括起來的是結構成員列表。每個成員都用自己的宣告來描述。例如,title部分就是乙個內涵128個元素的char型別的陣列。成員可以是任意一種c的資料型別,甚至可以是其他結構體。右花括號後面的分號是宣告所必需的,表示結構布局定義結束。可以把這個宣告放在所有函式的外部,也可以放在乙個函式定義的內部。如果把結構宣告置於乙個函式的內部,它的標記就只限於該函式內部使用。如果置於外部,那麼該宣告之後的所有函式都能使用標記。
結構有兩層含義。一層含義是「結構布局」,結構布局告訴編譯器如何表示資料,但是它並未讓編譯器為資料分配空間。下一步是建立乙個結構變數,即是結構的另一層含義。
struct book book1; // 建立結構變數
初始化變數和陣列如下:
int count = 0;
int array[7] = ;
結構變數也可以像這樣進行初始化,初始化乙個結構變數與初始化陣列的語法類似:
struct book book1 = ;
我們使用在一對花括號中括起來的初始化列表進行初始化,各初始化項用逗號分隔。因此,title成員可以被初始化為乙個字串,price可以被初始化為乙個數字。為了讓初始化項與結構中各成員的關聯更加明顯,我們讓每個成員的初始化項都獨佔一樣。這樣做只是為了提高**的可讀性,對編譯器而言,只需要用逗號分隔各成員的初始化項即可。
結構類似於乙個「超級陣列」,這個超級陣列中,可以是乙個元素為char型別,下乙個元素為float型別,下乙個元素為int陣列。可以通過陣列下標單獨訪問陣列中的個元素,那麼,如何訪問結構中的成員?使用結構成員運算子 點 (.) 訪問結構中的成員。例如,book1.price即訪問book1的price元素。可以像使用任何float型別變數那樣使用book1.price。與此類似,可以像使用字元陣列那樣使用 book1.title。
本質上,.title、.author和.price的作用相當於是book結構的下標。
所以在初始化結構體變數時,也可以指定成員:
struct book book1 = ;
既然已經是指定成員賦值了,那麼就不用再考慮順序:
struct book book1 =
C C 結構體詳解
前面沒有typedef的 最後乙個 後面的都是結構體變數,結構體變數陣列,結構體指標變數,都是變數。有typedef的 最後乙個 後面的都是型別,是可以拿來構建變數的。typedef struct freaarea 定義乙個空閒區說明表結構 elemtype elemtype data elemty...
c c結構體陣列 結構體指標
結構體中自己常常弄不清的。兩個常用的結構體陣列 結構體指標 將自定義的結構體放入到陣列中方便維護 語法 語法 struct 結構體名 陣列名 元素個數 舉例 struct student intmain for int i 0 i 3 i 2 結構體指標 顧名思義就是指向結構體的乙個指標 通過指標訪...
c c 結構體呼叫
1 最近做專案遇到,c 呼叫c dll裡的函式需要傳遞結構體引數,發現這個並不是簡單的在c 裡定義相應的結構體就可以的,下面以乙個例子來說明解決的辦法,c 中的函式和結構體如下 uint msec set igr gen cfg int port,igr gen t igr gen typedef ...