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

深入理解 C 語言結構體:陣列成員 vs 指標成員與動態記憶體應用

     編輯:關於C語言

C 語言結構體進階:字串成員的兩種設計抉擇

結構體中儲存字串時,可選擇固定大小陣列或指標配合動態記憶體。兩種方式在記憶體佈局、初始化便利性、彈性上有本質差異。

方案一:固定大小字元陣列

struct Student {
    char name[LEN];
    char address[LEN];
    int age;
};
// 初始化簡單,字串儲存在結構體內部
struct Student s = {"bluemsun", "NENU", 25};
  • 優點:記憶體連續、初始化直觀、無需手動管理記憶體
  • 缺點:固定長度可能浪費空間或不足、結構體體積較大

方案二:字元指標 + malloc

struct new_Student {
    char *name;
    char *address;
    int age;
};
// 需手動分配與複製
struct new_Student s1;
char str[] = "zhouxy";
s1.name = (char*)malloc(strlen(str) + 1);
strcpy(s1.name, str);
  • 優點:長度彈性、結構體本身小、可共享字串記憶體
  • 缺點:需手動 malloc/free、易造成記憶體洩漏、初始化麻煩

關鍵差異圖解

陣列版本:          指標版本:
+----------+        +----------+
| name[20] |        | *name  -----> [heap] "zhouxy"
| addr[20] |        | *addr  -----> [heap] "EFGH"
| age      |        | age      |
+----------+        +----------+
  40+ bytes            16 bytes (64-bit)

最佳實務建議

  1. 長度固定、已知上限的字串 → 使用陣列
  2. 長度不定、需動態調整 → 使用指標 + malloc
  3. 使用 malloc 後 必須配對 free,否則記憶體洩漏
  4. 指結構體指標時,使用 -> 運算子存取成員

常見錯誤

// 錯誤:直接指向字串常量,不可修改且生命週期不可控
struct new_Student s1 = {"zhouxy", "EFGH", 25}; 

// 正確:分配記憶體並複製
s1.name = malloc(strlen("zhouxy")+1);
strcpy(s1.name, "zhouxy");

理解結構體成員記憶體模型,能寫出更健壯、高效的 C 程式。

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