例如平面幾何中,兩點可以決定一條線,我們可以定義結構 line ,包含兩個結構 point 成員,然後另一個浮點數成員 len 記錄這條直線的長度
struct line { struct point start; struct point end; float len; }; |
當然,這樣結構 point 必須先定義,也就是說下列程式碼要放在結構 line 的定義之前
struct point { int x; int y; float h; char *p; }; |
我們以下面做個簡單說明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <stdio.h> struct point { int x; int y; float h; char *p; }; struct line { struct point start; struct point end; float len; }; typedef struct point Point; typedef struct line Line; int main( void ) { Point t1 = {3, 4, 5.0, "(3, 4)" }; Point t2 = {5, 12, 13.0, "(5, 12)" }; Line ab = {t1, t2, 8.54}; printf ( "\n點 t1 的 x 座標為 %d\n" , t1.x); printf ( "點 t1 的 y 座標為 %d\n" , t1.y); printf ( "點 t1 到原點的距離為 %f\n" , t1.h); printf ( "點 t1 以字串表示為 %s\n" , t1.p); printf ( "\n點 t2 的 x 座標為 %d\n" , t2.x); printf ( "點 t2 的 y 座標為 %d\n" , t2.y); printf ( "點 t2 到原點的距離為 %f\n" , t2.h); printf ( "點 t2 以字串表示為 %s\n" , t2.p); printf ( "\n直線 ab 的起始座標為 %s\n" , ab.start.p); printf ( "直線 ab 的結束座標為 %s\n" , ab.end.p); printf ( "直線 ab 的長度為 %f\n" , ab.len); return 0; } /* 《程式語言教學誌》的範例程式 檔名:structline.c 功能:示範結構的使用 作者:張凱慶 時間:西元2010年7月 */ |
第 16 行及第 17 行
16 17 | typedef struct point Point; typedef struct line Line; |
我們利用 typedef 將結構 point 定義為 Point 型態,另將結構 line 定義為 Line 型態,所以底下需要宣告結構 point 或結構 line 的時候,用 Point 型態或 Line 型態來宣告即可。
此外,我們看到第 35 行及第 36 行
35 36 | printf ( "\n直線 ab 的起始座標為 %d\n" , ab.start.p); printf ( "直線 ab 的結束座標為 %d\n" , ab.end.p); |
若是要存取結構中的結構的成員,可以利用結構成員運算子 . 依序存取即可。
編譯執行,結果如下

問題與討論
- 如何存取結構中的結構成員?
- 如何用指向結構的指標存取結構成員?
沒有留言:
張貼留言