學習 C 語言不僅是語法記憶,更是建立計算機底層思維。本文從控制流、數組、指針、內存、函數、結構體六大維度,提煉易錯點與工程心法。
if (flag) / if (!flag),勿與 TRUE/FALSE 比較,宏定義不一致極易出錯;== 比較,用 fabs(a-b) < EPS;if (ptr) / if (!ptr),清晰表達非空判斷。int a=1,b=2,c=2;
while (a < b < c) { // 鏈式比較在 C 中非數學意義!
// a
教訓:C 中 a 等價於 (a,結果為 0/1 再比較,極易誤解。嚴禁鏈式比較,應寫 a。
經典 for(i=0;i<10;i++) 訪問 arr[0]~arr[9]。若誤寫 i<=10 導致越界,輕則崩潰重則沉默數據破壞。養成「左閉右開」區間思維。
int a[3][3] 實為 9 個 int 連續排列,可用一維指針遍歷;char s[]="abc" 自帶 \0,char s[]={'a','b','c'} 無 \0,後者不可用 strlen/strcpy 等字符串函數;int a[3][2]={(0,1),(2,3),(4,5)} 實際初始化為 {1,3,5},逗號表達式取最後值。*p 解引用得到的值。malloc 後必判空;free 並置 NULL,杜絕野指針;const(const int* p / int const* p);assert(p) 捕獲空指針。const int *p; // *p 不可改
int const *p; // 同上
int * const p; // p 不可改
const int * const p; // 皆不可改
malloc/free 手動管理,跨函數共享數據必用堆;動態分配三步曲:申請 → 判空 → 使用 → 釋放 → 置NULL。
#pragma pack 可調整;C 語言看似簡單,實則每個特性都映射著計算機底層運行機制。將語法轉化為心智模型,在工程中踐行「安全、清晰、高效」三原則,方能寫出經得起時間考驗的代碼。