C 語言中的結構體(資料結構)
阿新 • • 發佈:2018-11-26
結構體是在資料結構中經常使用的一類,下面對結構體進行一些知識的補充
結構體和陣列的區別
結構體的宣告
結構體宣告的基本形式
struct tag {
member-list
}variable-list;
引數解釋
- tag:結構體的名字
- member-list:成員列表
- 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;