例如平面幾何中,兩點可以決定一條線,我們可以定義結構 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);若是要存取結構中的結構的成員,可以利用結構成員運算子 . 依序存取即可。
編譯執行,結果如下

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