日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C 语言中的结构体(数据结构)

發布時間:2024/8/1 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C 语言中的结构体(数据结构) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 前言
  • 結構體和數組的區別
  • 結構體的聲明
    • 方式一(不帶 tag)
    • 方式二(帶 tag)
  • 關于 typedef
    • typedef 在結構體的使用
  • 結構成員的訪問

前言

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

結構體和數組的區別

結構體的聲明

結構體聲明的基本形式

struct tag {member-list }variable-list;

參數解釋

  • 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++ 版本 #include <iostream> using namespace std;int main() {typedef struct{int age;string name;}people, *ppeople;// 點操作符people zhangsan = {13, "zhangsan"};cout << zhangsan.age << endl; // 13cout << zhangsan.name << endl; // zhangsan// 箭頭操作符ppeople lisi = &zhangsan;lisi->age = 17;lisi->name = "lisi";cout << lisi->age << endl;cout << lisi->name << endl;return 0; }

    圖解

    總結

    以上是生活随笔為你收集整理的C 语言中的结构体(数据结构)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。