在這篇我們即將介紹 C 語言範疇中很關鍵的一種資料結構 - 結構(Struct)。非常直截了當的命名,結構(Struct)可以存放不同種的資料型態(變數、指標、陣列),甚至是其他的已定義的結構(Struct)。
結構內不同型態的變數、結構等等,我們都統稱它為成員(Member)。在設計意義上,我們通常會將相關聯的資料放在一個結構裡,形成一個集合。
而結構(Struct)在 C++ 語言中就和類別(Class)沒什麼差異了,它也可具有繼承(Inherit)、
方法(Function)、建構式(Structor)、解構式(Destructor)等特性,這之後我們介紹類別(Class)時會再詳細說明。
我們先來看看結構的基本定義語法:
struct {struct name} {
members ...
};
struct person {
char name[16];
int age;
int id;
};
在定義語法中,我們需要先用 strcut 關鍵字作為開頭,後面緊接著是定義這個結構的名字,如上例我們定義了一個結構叫 person,然後結構內的成員(Member),
我們分別定義有名稱(name)、年紀(age)和ID,值得注意的是,像這樣所有成員都是靜態配置的情形下,這個結構所佔用的總記憶體空間就是成員佔用記憶體空間的總和。
這是結構常見的應用範例,將相關的數據放在一起,這樣我們就可以很清楚知道每筆資料的意義是什麼。
定義完成之後,我們要如何宣告來使用這樣的結構呢? 有兩種方式,如下:
struct person {
char name[16];
int age;
int id;
} Rain, RainD;
struct person {
char name[16];
int age;
int id;
};
void main() {
struct person Rain, RainD;
}
第一種方式是我們可以在定義結構的結尾直接宣告,如上例,我們直接宣告有兩個名叫 Rain 和 RainD 的名稱使用了這個結構。
第二種方式就是直接在要使用的地方直接宣告,語法意義為 struct {使用哪個結構} {名稱}。定義和宣告的位置一樣有先後順序區別,因此若宣告位置不想被受限,可以將結構定義寫在標頭檔(Header)裡,方便隨時隨地宣告使用。
接著我們來看下結構如何給予初始值,一樣也有幾種方式,如下:
struct person {
char name[16];
int age;
int id;
} Rain = {"Rain", 18, 123456}, RainD;
void main () {
strcpy(RainD.name, "RainD");
RainD.age = 19;
RainD.id = 654321;
}
struct person {
char name[16];
int age;
int id;
};
void main () {
struct person Rain;
strcpy(Rain.name, "Rain");
Rain.age = 18;
Rain.id = 123456;
}
在第一種的方式中,我們可以直接在宣告 Rain 之後用一個等於 + 大括號直接給予這個結構內各個成員的初始值,每個成員的初始值需要用逗號來分開,
各個的初始值也可以不給,或跳下一個成員給予初始值,只要用逗號隔開即可。
而 RainD 這個結構我們可以在其他地方去配置成員的值,當我們要存取成員時,只需在結構後面加一個"點",然後指定成員名稱,就可以讀取或寫入資料到這個成員,這和第二種方式一樣。
下一篇: 第二十課 - 結構指標(Struct Pointer)
Last updated: