C 結構體介紹

使用 struct 關鍵字,我們可以使用基本 C 型別來創建複雜的數據結構。

結構體是一個不同型別值的集合。在 C 語言中,數組 的型別是固定的,所以在很多情況下結構體會變得非常有趣。

以下是結構體的語法:

struct <structname> {
 //...variables
};

例子:

struct person {
 int age;
 char \*name;
};

你可以通過在右括號後面加上變量的名字來聲明一個結構體型別的變量,如下所示:

struct person {
 int age;
 char \*name;
} flavio;

或者多個變量,如下所示:

struct person {
 int age;
 char \*name;
} flavio, people[20];

在這種情況下,我聲明了一個名為 flavio 的單個 person 變量,以及一個包含 20 個 person 的數組 people

我們還可以在後面聲明變量,使用以下語法:

struct person {
 int age;
 char \*name;
};

struct person flavio;

我們可以在聲明時初始化結構體:

struct person {
 int age;
 char \*name;
};

struct person flavio = { 37, "Flavio" };

一旦我們定義了一個結構體,我們可以使用點來訪問其中的值:

struct person {
 int age;
 char \*name;
};

struct person flavio = { 37, "Flavio" };
printf("%s, age %u", flavio.name, flavio.age);

我們也可以使用點的語法來更改結構體中的值:

struct person {
 int age;
 char \*name;
};

struct person flavio = { 37, "Flavio" };

flavio.age = 38;

結構體非常有用,因為我們可以將它們作為函數參數傳遞或返回值使用,結構體中可以嵌入多個變量,每個變量都有一個標籤。

需要注意的是,結構體被拷貝傳遞,除非你通過指針將結構體傳遞給函數,此時它是以引用的方式傳遞。

使用 typedef 可以簡化結構體的代碼。

讓我們舉個例子:

typedef struct {
 int age;
 char \*name;
} PERSON;

使用 typedef 創建的結構體通常按照慣例以大寫命名。

現在我們可以這樣聲明新的 PERSON 變量:

PERSON flavio;

並且可以這樣在聲明時初始化它們:

PERSON flavio = { 37, "Flavio" };