當要記錄人,事或物相關的資訊時,如果能夠所有資料整理組織在一起,在應用上會方便許多。為了達成這個目的,C語言有一個資料結構語法 data structure type可供使用。用資料結構格式從記憶體上找出空間定義成資料結構實體,便可以備組織存放與特定事物的相關資訊。 例如:學生個資訊包括學號、姓名、住址、電話等,可視為關於學生的資料串。為記錄學生資料串,可準備多個欄位的格式(資料結構格式),格式中每個欄位對應一種資訊,然後利用此格式印出表單(資料結構實體),便可讓學生將個人資料填進表單中(寫入欄位)。
資料結構格式Declaration宣告
Struct是C語言用來表示結構的關鍵字,我們可以利用這個關鍵字可宣告某一種特定格式的資料結構,並給予名稱。 例如說我們需要一個記錄球體相關資料的結構格式,可用
struct Ball {
char color[10];
double radius;
};
以上範例利用struct 關鍵字為開頭,來宣告一個名稱為ball的資料結構格式,接著再以大括號{ }羅列出這個資料結構格式的內容。包含許多個被指定資料型態,以及欄名的欄位。 完成了前述的宣告之後,就會有一個名為struct Ball 的資料結構格式可以使用。
請注意,在宣告完成資料結構格式時,並沒有產生任何實體的記憶體空間可供存取。就如同設計好『表單格式』之後,仍然沒有可供填寫的實際表單出現,必需要等到將表單格式印到紙張上才會有真實的表單可供填寫。資料結構實體空間則必需用資料結構格式出來才有空間可以填寫內容。
資料結構實體定義definition 及初始化 Initialization
宣告了名為struct Ball的資料結構格式後,便可以使用它來定義並初始化 資料結構實體,比如: struct Ball ball1_str = {"red", 5.0};
資料結構格式『struct Ball』定義define取得所需大小的記憶體空間產生資料結構實體(如同印出表單),最後再以等號等於列舉常數串 ={"red", 5.0},來初始化其資料結構實體的內容(如同在表單欄內填入資料)。
我們也可以分階段完成定義,以及初始化,比如:
struct Ball ball2_str;
strcpy(ball2_str.color, "green");
ball2_str.radius = 10.0;
同前『struct Ball』定義出 ball2_str的空白資料結構實體。
C內建strcpy()函式將字串"green" 抄到 『ball2_str.color』欄內初始化color 欄位,直接用等式『ball2_str.radius=10.0』則可初始化 radius欄內容。由範例可知『.』這個運算子被放置在資料結構實體名稱ball2_str,與欄位名稱之間color,可以成為指定某一個資料結構實體的某一欄。
資料結構格式的宣告,資料結構實體定義,以及資料結構實體初始化,也可以在同一串指令之中完成一併完成, 例如:
struct Ball {
char color[10];
double radius;
} ball1_str = {"red", 5.0}, ball2_str ;
結構格式可以被定義成新的資料型態
Struct 關鍵字加上名稱,例如『struct Ball』,可以宣告某一個名稱的資料結構格式,再用這個資料結構型態來定義資料結構實體。但使用 Struct Ball兩個字來代表一個結構,在斷句上個比較難理解。
C語言允許使用者自己定義新的資料型態,當定義完成之後,便可以使用這個新的型態,來定義變數,利用這個方式,可以定義資料結構格式為一個新的型態例如:
typedef struct {
char color[10];
double radius;
} BallStr_t;
這個新資料型態 BallStr_t,可以被用來取代前述的資料結構格式『struct Ball』直接定義變數,如: BallStr_t ball1_str={"red", 5.0} ;