項目中大量見 void fun(const char *p),鮮見 void fun(const char p[])。
| 特性 | char *p | char p[] |
|---|---|---|
| 參數傳遞 | 傳遞指針值(4/8 字節) | 語法糖,編譯器同樣退化為指針 |
| 函數內 sizeof | sizeof(p) = 指針大小 | sizeof(p) = 指針大小(非數組長度) |
| 可修改指向 | p = other_ptr; 合法 | p = other_ptr; 編譯錯誤(數組名不可修改) |
| 語義表達 | 明確表示「指向字符串/緩衝區的指針」 | 誤導以為「傳遞整個數組副本」 |
char *p 立即知道是指針操作,不會誤以為傳值。p++)、重新賦值,配合 const 保護數據。strcpy、printf)均用指針形式,形成事實標準。void fun(char p[10])。// 只讀字符串
void print_str(const char *str);
// 修改緩衝區內容,不改指針
void fill_buf(char *buf, size_t len, char ch);
// 需要返回新分配的內存
char* allocate_str(size_t len);
統一使用 指針 + const 正確性,文檔中說明緩衝區長度約定,比裝飾性的 [] 更工程化。