
宣告定義關鍵字 struct ,接著是結構名稱,然後用大括弧圍起來的成員宣告,須留意結構定義完的右大括弧其後要接分號 ; 。
跟結構有關的運算子如下表
| 結構成員運算子 | . |
| 結構指標運算子 | -> |
宣告為某結構的變數就可以用結構成員運算子存取該成員,而結構指標運算子可以讓指向某結構的指標變數存取其成員,如下例
#include <stdio.h>
struct point {
int x;
int y;
};
int main(void)
{
struct point a;
struct point *aPtr = &a;
a.x = 3;
a.y = 4;
printf("a = (%d, %d)\n", a.x, a.y);
printf("*aPtr = (%d, %d)\n", aPtr->x, aPtr->y);
return 0;
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:structopt.c
功能:示範結構定義、宣告及結構運算子的使用
作者:張凱慶
時間:西元2010年4月 */編譯後執行,如下

第 10 行
struct point a;
宣告變數 a 為 point 結構的變數,第 11 行
struct point *aPtr = &a;
宣告並設定 aPtr 為指向變數 a 的指標,接著第 13 及 14 行
a.x = 3; a.y = 4;
便是利用結構成員運算子指派初值給變數 a ,最後第 16 及 17 行
printf("a = (%d, %d)\n", a.x, a.y);
printf("*aPtr = (%d, %d)\n", aPtr->x, aPtr->y);分別用結構成員運算子及結構指標運算子取出 a 的值並印在螢幕上。
第 13 及 14 行替結構設值可以用以下
struct point a = {3, 4};來替代,利用大括弧指派初值,大括弧內依序是各個結構成員。
利用關鍵字 typedef 可以替結構建立新型態名稱
#include <stdio.h>
struct point {
int x;
int y;
};
typedef struct point Point;
int main(void)
{
Point a = {3, 4};
printf("a = (%d, %d)\n", a.x, a.y);
return 0;
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:structtypedef.c
功能:示範利用 typedef 建立新型態名稱
作者:張凱慶
時間:西元2010年4月 */編譯後執行,如下

第 8 行
typedef struct point Point;
替結構 point 建立 Point 型態名稱,因此往後可以直接使用 Point ,無須 struct point 兩字連用。
typedef 也可以直接寫進結構定義中,第 3 到 8 行可用以下寫法代替
typedef struct point {
int x;
int y;
} Point;結構中的成員也可以是結構,例如
#include <stdio.h>
typedef struct point {
int x;
int y;
} Point;
typedef struct line {
Point start;
Point end;
} Line;
int main(void)
{
Line a = {3, 4, 5, 6};
printf("start = (%d, %d)\n", a.start.x, a.start.y);
printf("end = (%d, %d)\n", a.end.x, a.end.y);
return 0;
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:structstruct.c
功能:示範在結構中使用其他結構當作成員
作者:張凱慶
時間:西元2010年4月 */編譯後執行,如下

結構還有另一個主題,自我參考的結構
沒有留言:
張貼留言