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

C語言結構體中字串成員:字元陣列 vs 字元指標完整比較

     編輯:關於C語言

兩種宣告方式

// 方式一:字元陣列 (內建儲存空間)
struct info {
    char first[20];
    char last[20];
    int age;
};

// 方式二:字元指標 (僅存指標)
struct pinfo {
    char *first;
    char *last;
    int age;
};

記憶體佈局差異

特性char first[20]char *first
結構體大小包含 20+20+4 = 44 bytes包含 4+4+4 = 12 bytes (64位元為 24)
字串儲存位置結構體內部外部 (需自行 malloc)
初始化{"John", "Doe", 25}指向字串常量區 (唯讀)
修改字串直接修改若指向常量區 → 未定義行為
動態長度固定上限彈性 (配合 malloc/realloc)

指標版正確用法:動態配置

void setinfo(struct pinfo *p, const char *fn, const char *ln, int age) {
    p->first = malloc(strlen(fn) + 1);
    strcpy(p->first, fn);
    p->last = malloc(strlen(ln) + 1);
    strcpy(p->last, ln);
    p->age = age;
}

void clean(struct pinfo *p) {
    free(p->first);
    free(p->last);
}

使用範例

struct pinfo person;
setinfo(&person, "Alice", "Wang", 30);
printf("%s %s, %d\n", person.first, person.last, person.age);
clean(&person);

選擇建議

  • 固定長度、生命週期簡單 → 字元陣列
  • 可變長度、頻繁修改、共享字串 → 字元指標 + malloc/free
  • 嵌入式/效能敏感 → 字元陣列避免堆碎片
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved