HOME ABOUT CONTACT

C/C++教學: 第十九課 - 結構(Struct)

Rain September 28, 2024
Outline

1. 簡介

2. 定義結構語法

3. 宣告結構語法

4. 初始值配置

簡介top

在這篇我們即將介紹 C 語言範疇中很關鍵的一種資料結構 - 結構(Struct)。非常直截了當的命名,結構(Struct)可以存放不同種的資料型態(變數、指標、陣列),甚至是其他的已定義的結構(Struct)。

結構內不同型態的變數、結構等等,我們都統稱它為成員(Member)。在設計意義上,我們通常會將相關聯的資料放在一個結構裡,形成一個集合。 而結構(Struct)在 C++ 語言中就和類別(Class)沒什麼差異了,它也可具有繼承(Inherit)、 方法(Function)、建構式(Structor)、解構式(Destructor)等特性,這之後我們介紹類別(Class)時會再詳細說明。

定義結構語法top

我們先來看看結構的基本定義語法:


struct {struct name} {
    members ...
}; 
                        

struct person {
    char name[16];
    int age;
    int id;
}; 
                        

在定義語法中,我們需要先用 strcut 關鍵字作為開頭,後面緊接著是定義這個結構的名字,如上例我們定義了一個結構叫 person,然後結構內的成員(Member), 我們分別定義有名稱(name)、年紀(age)和ID,值得注意的是,像這樣所有成員都是靜態配置的情形下,這個結構所佔用的總記憶體空間就是成員佔用記憶體空間的總和。

這是結構常見的應用範例,將相關的數據放在一起,這樣我們就可以很清楚知道每筆資料的意義是什麼。

宣告結構語法top

定義完成之後,我們要如何宣告來使用這樣的結構呢? 有兩種方式,如下:


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)裡,方便隨時隨地宣告使用。

初始值配置top

接著我們來看下結構如何給予初始值,一樣也有幾種方式,如下:


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:

Related Artical List

  1. C/C++教學: 第十七課 - 陣列(Array)
  2. C/C++教學: 第十八課 - 動態記憶體配置(Dynamic Memory Allocation)
  3. >C/C++教學: 第二十課 - 結構指標(Struct Pointer)

Article List