本文系統整理 C 語言核心觀念,適合初學者建立完整知識骨架,也可作為複習速查。涵蓋基本資料型別、運算式、控制結構、陣列、字串、函式、結構體/聯合體/列舉、指標與記憶體管理。
int age; 向記憶體申請空間age = 30; 修改變數值printf("%d", age); 或 age = age + 1;| 型別 | 關鍵字 | 位元數 | 位元組數 | 範圍/精度 |
|---|---|---|---|---|
| 短整數 | short | 16 | 2 | -32,768 ~ 32,767 |
| 整數 | int | 32 | 4 | -2,147,483,648 ~ 2,147,483,647 |
| 長整數 | long | 64 | 8 | -9e18 ~ 9e18 |
| 單精度浮點 | float | 32 | 4 | 6~7 位有效數字 |
| 雙精度浮點 | double | 64 | 8 | 15~16 位有效數字 |
| 字元 | char | 8 | 1 | ASCII 0~255 |
使用 sizeof(type) 或 sizeof(var) 查看實際佔用位元組數。
0)、十進制、十六進制(前綴 0x)。char → short → int → long → float → double 方向安全;反方向可能截斷精度。+ - * / % ++ --== != > < >= <=&& || !& | ^ ~ << >>= += -= *= /= %=sizeof (type) ?: ,(逗號運算子)printf("格式", ...)、scanf("格式", &var)%d %f %c %s %p %x 等,可加旗標、寬度、精度。putchar(c)、getchar() 處理單一字元。if (cond1) { ... }
else if (cond2) { ... }
else { ... }
switch (expr) {
case 1: ... break;
case 2: ... break;
default: ... }
| 型別 | 語法 | 適用情境 |
|---|---|---|
| while | while (cond) { ... } | 次數未知,先判斷再執行 |
| do-while | do { ... } while (cond); | 至少執行一次 |
| for | for (init; cond; step) { ... } | 次數已知或可計算 |
break 跳出迴圈,continue 跳過本次迴圈。goto label;(慎用)。int arr[10] = {1,2,3}; 未初始化元素為 0(靜態/全域)或不定值(區域)。int a[3][4] 以列優先(Row-major)連續儲存。memcpy)。\0 結尾的字元陣列。"Hello" 長度 5,佔 6 位元組。<string.h>):
strcpy/strncpy 複製(注意緩衝區溢位)strcat/strncat 串接strcmp 比較(相等回 0)strlen 長度(不含 \0),sizeof 為編譯期陣列大小回傳型別 名稱(參數列表) { ... }auto(區域預設)、static(靜態存活、檔案/函式作用域)、extern(跨檔案連結)、register(建議暫存器)。struct Student { int no; char name[20]; }; 封裝異質資料。傳遞建議用指標避免複製開銷。union { int i; float f; }; 共用記憶體,同一時間只有一個成員有效值。enum Week {Mon, Tue, ...}; 具名常數,增強可讀性。typedef struct Student Student; 建立型別別名。int *p = &a;,*p 取值/修改值。p+1 移動 sizeof(*p) 位元組;同陣列指標相減得元素數。const int *p(指向常數)、int *const p(常數指標)、const int *const p(雙重常數)。void (*callback)(int); 實作回呼/事件驅動。| 區域 | 內容 | 生命週期 | 管理方式 |
|---|---|---|---|
| 程式碼區 | 機器指令 | 程式執行期間 | 唯讀 |
| 資料區 | 全域/靜態變數、字面常數 | 程式啟動~結束 | 靜態配置 |
| 堆疊 | 區域變數、參數、回傳位址 | 函式呼叫~返回 | 自動配置/釋放 (LIFO) |
| 堆積 | 動態配置 malloc/free | 程式設計師控制 | 手動管理 |
💡 學習建議: 多動手寫小程式驗證每個觀念(特別是指標與記憶體),善用除錯器觀察記憶體佈局與呼叫堆疊,將抽象概念具象化。