C 语言中的结构体(数据结构)
目錄
- 前言
- 結構體和數組的區別
- 結構體的聲明
- 方式一(不帶 tag)
- 方式二(帶 tag)
- 關于 typedef
- typedef 在結構體的使用
- 結構成員的訪問
前言
結構體是在數據結構中經常使用的一類,下面對結構體進行一些知識的補充。
結構體和數組的區別
結構體的聲明
結構體聲明的基本形式
struct tag {member-list }variable-list;參數解釋
在結構體聲明的時候,我們常會看到下面兩種聲明的方式
方式一(不帶 tag)
struct {int age;char sex; }man;大多數初學者看到這一長串的時候會發昏,這樣的聲明形式和一般的 int a 的形式有什么關聯呢?
方式二(帶 tag)
struct people{int age;char sex; };struct people man1 , man2;我們可以看到方式二的好處就是減少了變量聲明的冗余。如果像方式一那樣,你在另一個地方要聲明一個相同的變量,就必須把前面的成員列表那一大部分也帶上。
struct peple 作為整體相當于數據類型的名字,也就是說 struct people 和 int,float 是同一級別的概念。
同時使用方法一還會存在下面這個問題
struct {int age;char sex; }man1;struct{int age;char sex; }man2;man1 = man2; // 報錯雖然 man1 和 man2 是一樣的結構體類型,但是編譯器會認為是不同的類型。
但如果用方式二就不會報錯
struct people{int age;char sex; };struct people man1 , man2; // 或者為了好理解,也可以是 // struct people xiaozhang , xiaoli; struct people man3;man1 = man3; // 這樣就正確關于 typedef
typedef 也是在數據結構中常用的 C 語言的東西。它的英文翻譯是 “類型定義”。下面就來看看它的用法。
我更喜歡叫 typedef 為語義化,因為很大程度上使用 typedef 是為了語義化,是需要結合現實世界的。
typedef int Money這句代碼的意思就是,從今往后,Money 就可以代表 int 使用了。
Money money ; // 此時 money 就是 int 類型,等價于 int money;至于為什么使用 typedef 這樣的方式,個人最大的感受就是語義化吧,當然 typedef 為什么要使用的其他原因可以自行谷歌。
typedef 在結構體的使用
先來看看這段代碼
typedef struct people {int age;char sex; } chinese;很多人會和結構體的聲明弄混,其實不是,我用圖例來解釋就清楚了(對比結構體聲明的圖例,觀察二者的區別)
其中,people 表示的是結構體的名字,正如前面所說,struct people 同 int,bool 這些是同一級別的概念。
當然,用 typedef 的時候,你也可以省略結構的標簽,所以你有時還會看到下面的寫法
typedef struct {int age;char sex; } chinese;下面來看看數據結構單鏈表里面比較難理解的對單鏈表如何去定義
typedef struct Node_1 {int data;struct Node_1 *next; }Node_2;typedef struct Node_1 *linkList;// 通常代碼會把 Node_1 和 Node_2 都寫成一樣的 Node,具體的原因我也不是很清楚, // 有知道的同學可以在下面留言 // 但是僅就代碼而言 Node_1 表示的是結構體的名稱,而 Node_2 表示的是代替簡寫 // struct Node_1 的名稱。// 特別的是 struct Node_1 定義的是一個單獨的結點,所以我們看到 struct Node_1 // *next; 其本意是只該結點的下一個結點 // 而 typedef struct Node_1 *linkList; 表示的是一個結構體指針,有了指針,我們就 // 可以通過 malloc 函數將一個單獨的結點擴充成一個鏈表了。// 所以我們在定義 *linkList 的時候,typedef Node_2 *linkList; 和 // typedef struct Node_1 *linkList; 都是正確的。結構成員的訪問
主代碼
struct people{int age;char sex; };struct people man1 , man2,man3,*man4;
一個訪問 typedef 定義的結構體的示例
圖解
總結
以上是生活随笔為你收集整理的C 语言中的结构体(数据结构)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机基础知识教程word表格,[电脑基
- 下一篇: BCH编译码