|12 結構與列舉型態
|struct 與結構宣告定義 struct stname { type1 membername1 ; 12.1 建立與使用結構 |struct 與結構宣告定義 12.1.1 建立結構 struct stname { type1 membername1 ; type2 membername2 ; … typen membernamen ; } ; struct 關鍵字表示即將宣告一個自訂的結構型態 stname 為新建立的結構型態識別名稱 大括弧內逐一列舉結構成員的資料型態與成員名稱 結構的宣告最後以「;」做結尾。 | 引用結構型態 >>
|引用結構型態 struct stname sta ; sta.membername1 ; sta 被宣告為 stname 結構變數 12.1 建立與使用結構 |引用結構型態 12.1.1 建立結構 struct stname sta ; sta 被宣告為 stname 結構變數 透過 sta 存取其中定義的成員 sta.membername1 ; 引用 stname 結構的第 1 個成員 membername1 << struct 與結構宣告定義 定義結構處理表格 >>
|定義結構處理表格 12.1 建立與使用結構 12.1.1 建立結構 5 4 3 2 1 << 引用結構型態 << 引用結構型態 範例:結構示範 >>
|範例:結構示範 title:VB 2008 ISBN:123-456-789-00-11 price:550 pages:600 12.1 建立與使用結構 |範例:結構示範 12.1.1 建立結構 title:VB 2008 ISBN:123-456-789-00-11 price:550 pages:600 author:Tom 6 5 4 3 2 1 << 定義結構處理表格 初始化結構 >>
|初始化結構 struct book b1={ "VB 2008", "123-456-789-00-11", 12.1 建立與使用結構 |初始化結構 12.1.2 初始化結構成員 struct book b1={ "VB 2008", "123-456-789-00-11", 550,600,"Tom"}; << 範例:結構示範 範例:結構成員初始化 >>
|範例:結構成員初始化 12.1 建立與使用結構 12.1.2 初始化結構成員 2 1 << 初始化結構 << 初始化結構 結構定義與宣告同時完成 >>
|結構定義與宣告同時完成 struct book b ; 12.1 建立與使用結構 12.1.2 初始化結構成員 3 2 1 << 範例:結構成員初始化 範例:結構指定 >>
12.1 建立與使用結構 |範例:結構指定 12.1.2 初始化結構成員 3 2 title:VB 2008 ISBN:123-456-789-00-11 price:550 pages:600 author:Tom 1 << 結構定義與宣告同時完成 結構陣列語法 >>
|結構陣列語法 struct book books[6] ; books[0].title 變數 books 是一個 book 結構的陣列 12.1 建立與使用結構 |結構陣列語法 12.1.3 結構陣列 struct book books[6] ; 變數 books 是一個 book 結構的陣列 可以儲存 6 筆書籍資料 books[0].title 取得 books 結構陣列中,第 1 個 book 結構的 title 成員 << 範例:結構指定 範例:結構陣列 >>
|範例:結構陣列 12.1 建立與使用結構 12.1.3 結構陣列 3 2 1 << 結構陣列語法 << 結構陣列語法 範例:全域結構 >>
12.1 建立與使用結構 |範例:全域結構 12.1.4 全域結構 << 範例:結構陣列 結構型態引數宣告 >>
|結構型態引數宣告 struct 關鍵字宣告 stname 是結構名稱 sb 是結構變數 12.2 結構型態與函數 |結構型態引數宣告 void funname(struct stname sb) { … } struct 關鍵字宣告 stname 是結構名稱 sb 是結構變數 3 2 1 << 範例:全域結構 範例:結構型態引數 >>
|範例:結構型態引數 b 12.2 結構型態與函數 5 4 3 2 1 << 結構型態引數宣告 << 結構型態引數宣告 範例:回傳結構型態 >>
|範例:回傳結構型態 12.2 結構型態與函數 VB 2008 123-456-789-00-11 150 600 Tom << 範例:結構型態引數 typedef >>
|typedef void showStruct(struct book sb) { … } 結構命名冗長麻煩 12.3 定義型態名稱 |typedef void showStruct(struct book sb) { … } 結構命名冗長麻煩 12 11 typedef datatype typename ; 10 9 typedef 關鍵字定義自訂的型態 datatype 是資料型態名稱 typename 為自訂的型態名稱 8 7 6 5 4 3 typedef struct book KBOOK ; 2 1 << 範例:回傳結構型態 範例:typedef 示範 >>
|範例:typedef 示範 title:VB 2008 ,pages:680 VB 2008 680 12.3 定義型態名稱 3 2 1
|typedef 與型態名稱宣告 typedef struct book { char title[24] ; int price ; 12.3 定義型態名稱 |typedef 與型態名稱宣告 typedef struct book { char title[24] ; int price ; } kbook ; 以 typedef 關鍵字定義結構 最後一行指定 kbook 為結構名稱 << 範例:typedef 示範 巢狀 struct >>
|巢狀 struct st 是一個結構 nestst 亦是一個結構,它是 st 的成員 struct st { 12.4 巢狀式結構 |巢狀 struct struct st { struct nestst smember1 ; … } ; st 是一個結構 nestst 亦是一個結構,它是 st 的成員 << typedef 與型態名稱宣告 範例:巢狀式結構 >>
|範例:巢狀式結構 computer:C language,123456789 comic:Spider-Man,1122334455 12.4 巢狀式結構 |範例:巢狀式結構 computer:C language,123456789 comic:Spider-Man,1122334455 6 5 4 3 2 1 << 巢狀 struct 巢狀結構初始化 >>
|巢狀結構初始化 struct lib libbooks = { {"Java","j123456789"}, 12.4 巢狀式結構 |巢狀結構初始化 struct lib libbooks = { {"Java","j123456789"}, {"Super-Man","s1122334455"} } ; << 範例:巢狀式結構 宣告結構指標 >>
|宣告結構指標 struct xtype *stptname ; struct 表示要宣告一個 struct 型態的指標 12.5 指標與結構 |宣告結構指標 12.5.1 結構指標 struct xtype *stptname ; struct 表示要宣告一個 struct 型態的指標 xtype 為這個結構的型態名稱 5 4 3 2 1 << 巢狀結構初始化 指標結構 >>
「->」 取代 「.」 即可存取其中的 title 成員 12.5 指標與結構 |指標結構 12.5.1 結構指標 struct book { char title[24] ; char ISBN[18] ; int price ; } 12 11 10 struct book *b b = &books ; 9 8 7 b 是 book 型態的指標變數 b 儲存 book 結構的位址資訊 &books 6 5 4 b->title 3 2 「->」 取代 「.」 即可存取其中的 title 成員 1 << 宣告結構指標 範例:指標與結構 >>
|範例:指標與結構 books 位址:0240FF20 title=C language ISBN=11-22-33-44-55 12.5 指標與結構 |範例:指標與結構 12.5.1 結構指標 8 7 C language 11-22-33-44-55 6 590 books 位址:0240FF20 title=C language ISBN=11-22-33-44-55 price=590 5 4 3 2 1 << 指標結構 結構型態陣列宣告 >>
|結構型態陣列宣告 struct book books[6] ; Struct 表示用來儲存結構 books 本身的值是第一個元素的位址 12.5 指標與結構 |結構型態陣列宣告 12.5.2 結構陣列與指標 struct book books[6] ; 12 Struct 表示用來儲存結構 books 本身的值是第一個元素的位址 11 10 9 8 7 6 5 4 3 2 1 << 範例:指標與結構 指標與結構陣列 >>
|指標與結構陣列 books 位址:0240FF00 title=C language ISBN=11-22-33-44-55 12.5 指標與結構 |指標與結構陣列 12.5.2 結構陣列與指標 books 位址:0240FF00 title=C language ISBN=11-22-33-44-55 price=590 title=Java ISBN=123456789 price=650 5 4 3 2 1 << 結構型態陣列宣告 列舉宣告 >>
|列舉宣告 enum ename { ec1 , ec2 , … ecn } ; enum 宣告列舉關鍵字,ename 是列舉的識別名稱 12.6 列舉 |列舉宣告 12.6.1 建立列舉 enum ename { ec1 , ec2 , … ecn } ; enum 宣告列舉關鍵字,ename 是列舉的識別名稱 大括弧內部的 ec1 等項目則是整數型態的列舉常數名稱 列舉常數的第一個成員為 0 ,接下來逐一遞增 ec1 代表 0 ,ec2 代表 1 ,以下類推 列舉常數的值無法被更改。 4 3 2 1 << 指標與結構陣列 宣告列舉型態變數 >>
|宣告列舉型態變數 enum ename evar ; evar=ec1 ; evar 是一個列舉型態變數 12.6 列舉 12.6.1 建立列舉 enum ename evar ; evar=ec1 ; evar 是一個列舉型態變數 << 列舉宣告 範例:列舉示範 >>
|範例:列舉示範 w:4 1 2 3 4 5 6 12.6 列舉 12.6.1 建立列舉 4 3 2 1 << 宣告列舉型態變數 1 2 3 4 5 6 w:4 4 3 2 1 << 宣告列舉型態變數 範例:列舉值比對 >>
|範例:列舉值比對 5 今天星期 六 12.6 列舉 12.6.1 建立列舉 4 3 2 1 << 範例:列舉示範 << 範例:列舉示範 列舉變數的宣告 >>
week1 以及 week2 均是 week 列舉變數 12.6 列舉 |列舉變數的宣告 12.6.2 列舉常數的設定 enum week { mon,tue,wed,thu, fri,sat,sun } week1,week2; week1 以及 week2 均是 week 列舉變數 << 範例:列舉值比對 範例:列舉設定 >>
|範例:列舉設定 week1:4,week2:3 12.6 列舉 12.6.2 列舉常數的設定 4 3 2 1 << 列舉變數的宣告 初始化取代預設值 >>
|初始化取代預設值 enum week { mon=100, tue=200, … sun=700 } 12.6 列舉 12.6.2 列舉常數的設定 enum week { mon=100, tue=200, … sun=700 } << 範例:列舉設定 範例:列舉初始化設定 >>
|範例:列舉初始化設定 week1:300,week2:301 12.6 列舉 12.6.2 列舉常數的設定 4 3 2 1 << 初始化取代預設值 |