本文系統梳理 C 語言核心知識體系,涵蓋基礎語法、數據類型、流程控制、函數、指針、數組、字符串、結構體、預處理、內存模型、位運算、文件操作等,適合初學者建立知識樹、老手快速回顧。
main 函數;由多函數構成。| 類別 | 規則/關鍵字 |
|---|---|
| 註釋 | // 單行、/* 多行 */ |
| 標識符 | 字母/數字/下劃線,首字符非數字,區分大小寫,勿與關鍵字衝突 |
| 關鍵字 (32) | auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while |
| 轉義字符 | \n \t \\ \' \" \0 \r \b \f \v \a |
char(1B)、short(2B)、int(4B)、long(4/8B)、float(4B)、double(8B)、void。signed/unsigned、short/long。const 修飾變量、#define 巨集、enum 枚舉常量。static 局部(靜態區、塊作用域)、register(建議寄存器)、extern(聲明外部)。+ - * / %(整數除法向零截斷)。== != < > <= >=(結果 int 0/1)。&& || !(短路求值)。& | ^ ~ << >>(僅整型)。= += -= *= /= %= <<= >>= &= ^= |=。sizeof(編譯期)、++ --、?: 三目、, 逗號運算符。() [] -> . > ++ -- + - ! ~ (type) * & sizeof > * / % > + - > << >> > < <= > >= > == != > & > ^ > | > && > || > ?: > = += ... > ,。if/else if/else、switch/case/default(僅整型常量標籤)。while、do-while(至少一次)、for(init; cond; step)。break(跳出當層迴圈/switch)、continue(進入下輪判斷)、goto label(慎用,跳出多層迴圈可接受)、return。type arr[N],名為首元素地址(右值),不可修改。type arr[R][C],本質是「R 個長度 C 的一維數組組成的一維數組」。arr 類型 type (*)[C](行指針),arr[0] 類型 type*(列指針)。\0 結尾的字符數組。strlen 不計 \0,sizeof 含 \0。strcpy/strncpy/strcat/strncat/strcmp/strncmp/strlen/strchr/strstr 等需 <string.h>。p+1 移動 sizeof(*p) 字節)。int *p[3] vs 數組指針 int (*p)[3] vs 函數指針 int (*p)(int)。const 修飾位置(const int *p vs int *const p)。struct Tag { ... },成員存取 .、->。對齊規則影響 sizeof。enum Tag { A, B=5, C },本質為 int 常量。| 區域 | 內容 | 管理 |
|---|---|---|
| 代碼區 | 函數機器碼、字面常量 | 只讀,程式啟動載入 |
| 全局/靜態區 | 全局變量、static 變量 | 程式啟動分配,退出釋放 |
| 棧區 | 局部變量、函數參數、返回地址、棧幀 | 編譯器自動管理(進棧/出棧) |
| 堆區 | 動態分配 | 程式員手動 malloc/free/new/delete |
#define 巨集(文本替換、帶參巨集、# 字符串化、## 連接)。#undef 取消巨集。#if/#ifdef/#ifndef/#elif/#else/#endif,防止重複包含 #ifndef GUARD_H #define GUARD_H ... #endif。#include:<sys> 系統路徑、"local" 當前目錄。#pragma once(編譯器擴展,防重複包含)。FILE *fp = fopen("file.txt", "r"); // 模式: r/w/a/rb/wb/ab/r+/w+/a+
if (fp) {
fgetc/fputc; fgets/fputs; fread/fwrite; // 字符/行/二進制塊
fseek(fp, offset, SEEK_SET/CUR/END); ftell(fp); rewind(fp);
fclose(fp);
}
b 避免換行符轉換(Windows \r\n ↔ \n)。0b1010(C23)、012(八進制)、10(十進制)、0xA(十六進制)。x & (x-1) 清除最低位 1;x & -x 取最低位 1;x ^ (x>>1) 格雷碼;(a&b) + ((a^b)>>1) 無溢位平均值。此總結覆蓋 C 語言 90% 核心考點,建議收藏並定期複習,構建堅實知識骨架。