最近研讀《C語言常見問題》,發現許多「懂得都懂」的基礎知識卻極易踩坑。古云「不積跬步,無以至千里」,特整理核心考點分享,助力夯實基本功。
\n ⇄ \r\n),單行 ≤ 255 字符。不限於 .h 後綴,可包含任意文本文件(如 .inc、.def),本質是文本替換。
| 場景 | 推薦 | 理由 |
|---|---|---|
| 微小、高頻、可重複代碼片段 | 宏 | 展開零開銷,極致速度 |
| 邏輯複雜、多行、需類型安全、調試友好 | 函數 | 可讀性、維護性、類型檢查 |
| 極度追求代碼體積 | 函數 | 避免代碼膨脹 |
strcpy:僅限字符串(以 \0 結尾),遇 \0 停止。memcpy:任意類型內存塊拷貝,需指定長度,不關心內容。itoa(int, char*, radix):整數 → 字符串(非標準但廣泛支持)。atoi(const char*):字符串 → 整數(標準庫)。NULL(0 或 (void*)0),不指向任何對象。0 或 (void*)0,二者幾乎等價。NULL == 0 為真(比較語義)。memset(ptr, 0, ...) 當作賦 NULL。if (ptr) 等價於 if (ptr != NULL)。兩指針不可相加(無意義),只能相減得 ptrdiff_t。
void 函數無返回值,可省略 return。return 跳過後續代碼。exit():終止整個進程,控制權交還 OS。return:從當前函數返回,控制權交還調用者。&arr[n](尾後一元素地址),嚴禁解引用。arr:類型 T*,指向首元素。&arr:類型 T(*)[N],指向整個數組,+1 跨越整個數組大小。描述特定區域的程序運行規則(字符集、貨幣、日期格式等),是國際化(i18n)基石。
基礎知識如水、山、雲,看似平常卻支撐一切上層建築。建議定期回顧,將「知道」轉化為「肌肉記憶」,在實戰中自然避開陷阱。