本文系統整理 C 語言從入門到進階的核心知識點,涵蓋資料型別、控制流程、函式、指標、記憶體管理、檔案處理等模組,適合作為快速查閱的技術手冊。
.c 經 gcc 編譯成目的檔 .o,再連結生成可執行檔 a.out。vi/vim、VS Code、Xcode(macOS)、GDB 除錯。ls、pwd、cd、mkdir、rm、相對/絕對路徑切換。| 分類 | 關鍵字 | 大小 (Byte) | 範圍/精度 |
|---|---|---|---|
| 字元 | char | 1 | -128~127 / 0~255 |
| 短整數 | short | 2 | -32,768~32,767 |
| 整數 | int | 4 | -2³¹~2³¹-1 |
| 長整數 | long | 4/8 | 平台相關 |
| 單精度浮點 | float | 4 | ~7 位有效數字 |
| 雙精度浮點 | double | 8 | ~15 位有效數字 |
進制表示:八進制 0 前綴、十六進制 0x 前綴、二進制無原生支援(C23 新增 0b)。
+ - * / %(整數除法截尾,取餘符號遵循被除數)。++i 先運算後取值,後置 i++ 先取值後運算。== != > < >= <=、&& || !(短路求值)。& | ^ ~ << >>,常用於旗標操作、快速乘除 2 的冪次。cond ? expr1 : expr2,可巢狀實現多重分支。if (score >= 90) puts("A");
else if (score >= 60) puts("B");
else puts("C");
switch 適用於整數/字元常數分支,記得加 break 避免貫穿。
| 類型 | 適用場景 | 特點 |
|---|---|---|
for | 已知次數 | 初始化、條件、迭代集中 |
while | 未知次數,先判斷 | 零次以上 |
do-while | 至少執行一次 | 後判斷 |
跳轉控制:break 跳出迴圈/switch,continue 跳過本次迭代。
int a[10]; 記憶體連續,下標 0 起算,長度不可變(C99 支援 VLA)。int m[3][4]; 行優先儲存,巢狀迴圈遍歷。\0 結尾的字元陣列,標準庫 <string.h> 提供 strcpy、strcat、strlen、strcmp 等。// 宣告
int max(int a, int b);
// 定義
int max(int a, int b) { return a > b ? a : b; }
// 呼叫
int m = max(3, 5);
fact(n) = n * fact(n-1)。int (*pf)(int, int) = max; 實現回呼、多型。int **pp 指向指標的指標,常用於修改指標本身、動態二維陣列。p + i 移動 i * sizeof(*p) 位元組。const 修飾位置決定語意:const int *p(指向常數)、int *const p(常數指標)。| 函式 | 用途 | 備註 |
|---|---|---|
malloc(size) | 分配未初始化記憶體 | 失敗回傳 NULL |
calloc(n, size) | 分配並歸零 | 等同 malloc + memset |
realloc(ptr, new_size) | 調整大小 | 可能移動記憶體 |
free(ptr) | 釋放 | 釋放後指標置 NULL 避免野指標 |
記憶體區段:程式碼區、全域/靜態區、堆疊、堆區。區域變數存堆疊,自動釋放;動態分配存堆區,手動管理。
typedef struct {
int id;
char name[20];
float score;
} Student;
typedef union {
int i;
float f;
char c[4];
} Data; // 共用 4 位元組
typedef enum { MON=1, TUE, WED } Weekday;
#define PI 3.14159、#define MAX(a,b) ((a)>(b)?(a):(b))(注意副作用)。#ifdef DEBUG、#ifndef GUARD_H 防止重複包含。.h 放宣告/巨集,.c 放定義,gcc -c a.c b.c && gcc a.o b.o -o app。static 限制連結可見度,extern 跨檔案共享全域變數。struct { unsigned a:3; unsigned b:5; } 精確控制位元配置。<stdarg.h> 實現 printf 風格函式。fopen/fclose/fread/fwrite/fprintf/fscanf,文字/二進制模式。freopen、管線 |。此筆記涵蓋 C 語言核心 90% 常用知識,建議搭配《C Primer Plus》、《C 專家編程》深化理解,並多動手實作專案(如簡易 Shell、記憶體分配器、網路伺服器)以內化技能。