首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言核心知識體系全景筆記:從基礎語法到進階實作

     編輯:關於C語言

C 語言核心知識體系全景筆記

本文系統整理 C 語言從入門到進階的核心知識點,涵蓋資料型別、控制流程、函式、指標、記憶體管理、檔案處理等模組,適合作為快速查閱的技術手冊。

一、開發環境與程式建構流程

  • 編輯 → 編譯 → 連結 → 執行:原始碼 .c 經 gcc 編譯成目的檔 .o,再連結生成可執行檔 a.out。
  • 常用工具:vi/vim、VS Code、Xcode(macOS)、GDB 除錯。
  • 終端機基本指令:ls、pwd、cd、mkdir、rm、相對/絕對路徑切換。

二、資料型別與變數

分類關鍵字大小 (Byte)範圍/精度
字元char1-128~127 / 0~255
短整數short2-32,768~32,767
整數int4-2³¹~2³¹-1
長整數long4/8平台相關
單精度浮點float4~7 位有效數字
雙精度浮點double8~15 位有效數字

進制表示:八進制 0 前綴、十六進制 0x 前綴、二進制無原生支援(C23 新增 0b)。

三、運算子與表達式

  • 算術:+ - * / %(整數除法截尾,取餘符號遵循被除數)。
  • 自增/自減:前置 ++i 先運算後取值,後置 i++ 先取值後運算。
  • 關係/邏輯:== != > < >= <=、&& || !(短路求值)。
  • 位元:& | ^ ~ << >>,常用於旗標操作、快速乘除 2 的冪次。
  • 條件運算子:cond ? expr1 : expr2,可巢狀實現多重分支。

四、控制流程

1. 選擇結構

if (score >= 90) puts("A");
else if (score >= 60) puts("B");
else puts("C");

switch 適用於整數/字元常數分支,記得加 break 避免貫穿。

2. 迴圈結構

類型適用場景特點
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; 實現回呼、多型。

七、指標與記憶體管理

1. 指標進階

  • 多層指標:int **pp 指向指標的指標,常用於修改指標本身、動態二維陣列。
  • 指標運算:p + i 移動 i * sizeof(*p) 位元組。
  • const 修飾位置決定語意:const int *p(指向常數)、int *const p(常數指標)。

2. 動態記憶體

函式用途備註
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 風格函式。
  • 檔案 I/O:fopen/fclose/fread/fwrite/fprintf/fscanf,文字/二進制模式。
  • 標準輸入輸出重導向:freopen、管線 |。

此筆記涵蓋 C 語言核心 90% 常用知識,建議搭配《C Primer Plus》、《C 專家編程》深化理解,並多動手實作專案(如簡易 Shell、記憶體分配器、網路伺服器)以內化技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved