1. 程式人生 > >C 語言中的結構體(資料結構)

C 語言中的結構體(資料結構)

結構體是在資料結構中經常使用的一類,下面對結構體進行一些知識的補充

結構體和陣列的區別

在這裡插入圖片描述

結構體的宣告

結構體宣告的基本形式

struct tag {
	member-list
}variable-list;

引數解釋

  1. tag:結構體的名字
  2. member-list:成員列表
  3. variable-list:變數列表

在結構體宣告的時候,我們常會看到下面兩種宣告的方式

方式一(不帶 tag)
struct {
	int age;
	char sex;
}man;

大多數初學者看到這一長串的時候會發昏,這樣的宣告形式和一般的 int a

的形式有什麼關聯呢?

在這裡插入圖片描述

方式二
struct people{
	int age;
	char sex;
};

struct people man1 , man2;

我們可以看到方式二的好處就是減少了變數宣告的冗餘。如果想方式一那樣,你在另一個地方要宣告一個相同的變數,就必須把前面的成員列表那一大部分也帶上。

同時使用方法一還會存在下面這個問題


struct {
	int age;
	char sex;
}man1;

struct{
	int age;
	char sex;
};

man1 = man2;  // 報錯 

雖然 man1 和 man2 是一樣的結構體型別,但是編譯器會認為是不同的型別。

但如果用方式二就不會報錯

struct people{
	int age;
	char sex;
};

struct people man1 , man2;
struct people man3;

man1 = man3; // 這樣就正確 

關於 typedef

typedef 也是在資料結構中常用的 C 語言的東西。它的英文翻譯是 “型別定義”。下面就來
看看它的用法。

  typedef int Money

這句程式碼的意思就是,從今往後,Money 就可以代表 int 使用了。

Money money ; // 此時 money 就是 int 型別

至於為什麼使用 typedef 這樣的方式,個人最大的感受就是語義化吧,當然 typedef 為什麼要使用的其他原因可以自行谷歌。

typedef 在結構體的使用

先來看看這段程式碼

typedef struct people {
	int age;
	char sex;
} chinese;

很多人會和結構體的宣告弄混,其實不是,我用圖例來解釋就清楚了(對比結構體宣告的圖例,觀察二者的區別)

在這裡插入圖片描述

當然,用 typedef 的時候,你也可以省略結構的標籤,所以你有時還會看到下面的寫法

typedef struct {
	int age;
	char sex;
} chinese;

結構成員的訪問

主程式碼

struct people{
	int age;
	char sex;
};

struct people man1 , man2,man3,*man4;

在這裡插入圖片描述