例如平面幾何中,兩點可以決定一條線,我們可以定義結構 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; };
我們以下面做個簡單說明
#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; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:structline.c 功能:示範結構的使用 作者:張凱慶 時間:西元2010年7月 */
第 16 行及第 17 行
typedef struct point Point; typedef struct line Line;
我們利用 typedef 將結構 point 定義為 Point 型態,另將結構 line 定義為 Line 型態,所以底下需要宣告結構 point 或結構 line 的時候,用 Point 型態或 Line 型態來宣告即可。
此外,我們看到第 35 行及第 36 行
printf("\n直線 ab 的起始座標為 %d\n", ab.start.p); printf("直線 ab 的結束座標為 %d\n", ab.end.p);
若是要存取結構中的結構的成員,可以利用結構成員運算子 . 依序存取即可。
編譯執行,結果如下
問題與討論
- 如何存取結構中的結構成員?
- 如何用指向結構的指標存取結構成員?
沒有留言:
張貼留言