首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言結構體與指針深度融合:從基礎到鏈表、二叉樹實戰

     編輯:關於C

前置知識速查

  • sizeof 是運算子,非函式,編譯期計算類型/變數佔用位元組數。
  • #define MAXN 100 為巨集替換,無型別檢查。
  • typedef int ElemType; 為類型別名,便於資料結構泛型化。

結構體:使用者自訂的複合類型


指針:存放記憶體位址的變數


結構體指針與成員存取

name);

規則:變數用 .,指針用 ->。

自參考結構體:鏈表與樹的基石

單向鏈表節點

typedef struct BTNode {
    int data;
    struct BTNode *lchild, *rchild;
} BTNode, *BTPtr;  // 同時定義類型與指針別名

實戰:鏈表基本操作

data);
    putchar('\n');
}

// 釋放
void free_list(Node *head) {
    Node *p = head;
    while (p) { Node *tmp = p; p = p->next; free(tmp); }
}

常見錯誤與避坑指南

錯誤後果修正
Node *p; p->data = 1;野指針崩潰先 malloc 再用
函數內 malloc 但傳一級指針外部指針不變傳二級指針或回傳位址
free(p); 後繼續用 p懸空指針 UBfree(p); p = NULL;
結構體賦值 p->str = "hello"指向字面常量,不可修改用陣列 strcpy(p->str, "hello")

總結

結構體提供資料組織,指針提供動態連結,兩者結合構成了 C 語言實現複雜資料結構(鏈表、樹、圖、哈希表)的基石。熟練掌握 malloc/free、指針傳遞、自參考結構體,是從「寫代碼」邁向「架構系統」的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved