C語言 - 第三十一章 | struct - struct 簡介
📑 目錄
struct 簡介
struct是C中用來組織資料的關鍵字,當使用struct時,考慮的是一組資料擁有的相關性,例如學生會有學號、姓名、住址、電話等,若操作時經常都要傳遞同樣一組資料,可以使用struct來定義一個Student型態,這個型態中包括了學號、姓名、住址、電話等資訊,接著可以使用Student來宣告新的資料,進行資料指定或取出等。
舉個實例來說,可以定義一個「球」的模子,考慮球有各種不同的顏色,以及球最基本的球半徑資訊,若這組資料經常在一起出現,這些資訊應該可以定義一個Ball型態,在C中要包裝這些資訊時,可以進行定義。
1 | struct Ball { |
最重要的是別忘了在最後加上分號,初學C的新手很常犯這個錯誤;接下來要使用這個Ball的話,可以如下建立實例並初始化。
1 | struct Ball ball1 = {"red", 5.0}; |
這樣的話,ball1將包括color與radius兩個資料成員,以上的寫法將color成員初始化為"red",而radius初始化為5.0;
也可以先宣告,後來再設定成員資料。
1 | struct Ball ball2; |
在建立實例並初始化時,也可以使用成員名稱,不一定要按照成員名稱的定義順序來指定。
1 | struct Ball ball1 = {.radius = 5.0, .color = "red"}; |
在存取struct成員時,必須透過宣告的名稱加上.運算子。
1 |
|
1 | // 執行結果 |

亦可以在定義struct時,直接宣告struct實例。
1 | struct Ball { |
如要宣告struct陣列並初始化每個結構成員。
1 | struct Ball balls[] = { |
方便起見,可以使用typedef定義struct的名稱,如此一來,宣告並產生實例時,就不用再寫struct關鍵字。
1 | include <stdio.h> |
或者是這樣重新命名。
1 | typedef struct { |
可以直接使用指定運算子,將一個struct的實例指定給另一個實例,這會將struct實例的成員值,一個一個「複製」給另一個被指定的對象。
1 |
|
1 | // 執行結果 |

同樣的道理,如果在函式的引數傳遞時,同樣也是將struct的成員值一個一個「複製」給函式上的參數。
1 |
|
1 | // 執行結果 |
在程式的foo()呼叫中,將ball傳遞給foo()上的參數,並在foo()中改變radius,但由於是複製成員值,這並不影響main()當中的 ball實例之成員值。

在struct中,也可以再宣告struct。
1 | struct Student { |
可以看到,定義struct時,不一定要定義struct名稱,而可以直接在定義結構之後,直接宣告實例。
註:以上參考了
struct 簡介