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 | 懸空指針 UB | free(p); p = NULL; |
結構體賦值 p->str = "hello" | 指向字面常量,不可修改 | 用陣列 strcpy(p->str, "hello") |
結構體提供資料組織,指針提供動態連結,兩者結合構成了 C 語言實現複雜資料結構(鏈表、樹、圖、哈希表)的基石。熟練掌握 malloc/free、指針傳遞、自參考結構體,是從「寫代碼」邁向「架構系統」的關鍵一步。