本筆記將 C 語言核心知識點按邏輯依賴關係組織為九大模塊,涵蓋數據類型、控制流、數組/字符串、函數、結構體、指針、內存管理、函數指針,適合系統性重溫或面試速查。
| 類型 | 32位字節 | 64位字節 | 格式符 |
|---|---|---|---|
char | 1 | 1 | %c |
short | 2 | 2 | %hd |
int | 4 | 4 | %d |
long | 4 | 8 | %ld |
float | 4 | 4 | %f |
double | 8 | 8 | %lf(輸入)/%f(輸出) |
關鍵點:long 隨架構變化;sizeof 編譯期確定;signed/unsigned 影響範圍不影響大小。
++/-- 前後綴區別;%/ 整數除法截斷;+= 等復合賦值含隱式轉換。&& 左側假則右不算;|| 左側真則右不算 —— 性能優化技巧。if/else if/else 級聯;?: 三元運算符;switch-case 僅支持整型常量標籤,break 易漏導致貫穿。enum 枚舉:符號常量,默認 0 起遞增,可手動指定值(enum Color {RED=1, GREEN, BLUE})。| 循環類型 | 適用場景 | 關鍵差異 |
|---|---|---|
for | 已知次數 | 初始化/條件/增量集中 |
while | 未知次數,先判斷 | 可能零次執行 |
do-while | 至少一次 | 先執行後判斷 |
嵌套規律:外層控制行,內層控制列;外層一次,內層 N 次。
int a[4] = {1,2,3,4}; // 全量
int b[4] = {1}; // 部分,餘補 0
int c[] = {1,2,3}; // 自動推導長度 3
for(i=0; i a[j+1]) swap;
strlen:有效長(遇 \0 止)strcpy:複製含 \0,目標空間必須足夠strcat:追加,同前提strcmp:字典序比較,返回 <0/=0/>0#define PI 3.14
#define SUM(A,B) ((A)+(B)) // 參數加括號,整體加括號,防優先級錯誤
| 類型 | 示例 | 返回值處理 |
|---|---|---|
| 無參無返 | void print(void) | 無 return 或 return; |
| 無參有返 | int getVal(void) | 必須 return 值; |
| 有參無返 | void setVal(int x) | 同上 |
| 有參有返 | int add(int a,int b) | 同上 |
extern 可跨文件。struct Student { int id; char name[20]; float score; };
struct Student s1 = {1, "Tom", 90.5};
s1.id = 2; // 成員訪問
struct Student *p = &s1;
p->score = 95.0; // 指針訪問
結構體大小 = 成員大小之和 + 填充字節,按最大成員類型倍數對齊。#pragma pack(n) 可調整。
p+1 = 地址 + sizeof(*p),而非 +1 字節。a[i] ≡ *(a+i)。&a+1 跳過整個數組;&a[0]+1 跳過一個元素。int a=10, *p=&a, **pp=&p, ***ppp=&pp;
***ppp = 20; // 修改 a
| 區域 | 存放內容 | 生命周期 | 管理方式 |
|---|---|---|---|
| 代碼區 | 二進制指令 | 進程存續 | 系統 |
| 常量區 | 字面量、const 全局 | 進程存續 | 唯讀 |
| 靜態/全局區 | 全局/靜態變量 | 進程存續 | 零初始化,一次分配 |
| 堆區 | malloc/free | 程序員控制 | 手動申請/釋放,free 後置 NULL |
| 棧區 | 局部變量、參數、返回地址 | 函數調用周期 | 自動分配/釋放,~8MB 限制 |
malloc(size):未初始化calloc(n, size):歸零初始化realloc(ptr, newSize):擴/縮容,可能移動內存// 返回 int,兩 int 參數的函數指針類型
int (*pf)(int, int);
// 別名簡化
typedef int (*PFUNC)(int, int);
PFUNC pf = add; // 指向函數
pf(3, 4); // 調用
callback()。void process(PFUNC cb)。process(myCallback)。應用場景:qsort 比較器、事件驅動、策略模式、異步通知。
類型系統 → 變量/常量 → 運算式/語句 → 控制流(分支/循環)
↓
數組/字符串 → 結構體 → 指針 → 內存模型
↓
函數 → 函數指針 → 回調/多態雛形
九天串聯起 C 語言「類型-內存-控制-抽象」四大支柱。建議配合 《C Primer Plus》/《C專家編程》 深化,並動手實現:動態數組、鏈表、簡易 Shell、內存池、回調框架。C 語言簡潔而深邃,掌握其核心模型,便掌握了計算機系統的通用語言。