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

C 語言學習總結筆記:從基礎語法到指針、內存、文件操作全景圖

     編輯:關於C語言

C 語言學習總結筆記:從基礎語法到指針、內存、文件操作全景圖

本文系統梳理 C 語言核心知識體系,涵蓋基礎語法、數據類型、流程控制、函數、指針、數組、字符串、結構體、預處理、內存模型、位運算、文件操作等,適合初學者建立知識樹、老手快速回顧。

一、 基礎概念與程式結構

  • C 是面向過程高級語言,無需運行時(異於 Java/C#)。
  • 標準演進:K&R C → C89/ANSI C → C99 → C11 → C18 → C23。
  • 程式入口: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(聲明外部)。
  • typedef:類型別名,語義屬於類型系統(異於巨集文本替換)。

四、 運算符與表達式

  • 算術:+ - * / %(整數除法向零截斷)。
  • 關係:== != < > <= >=(結果 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);
}
  • 緩衝模式:全緩衝(檔案)、行緩衝(終端)、無緩衝(stderr)。
  • 二進制模式 b 避免換行符轉換(Windows \r\n ↔ \n)。

十二、 進制與位運算技巧

  • 進制字面值:0b1010(C23)、012(八進制)、10(十進制)、0xA(十六進制)。
  • 互轉:二進制作為橋梁(3位↔八進制、4位↔十六進制)。
  • 技巧:x & (x-1) 清除最低位 1;x & -x 取最低位 1;x ^ (x>>1) 格雷碼;(a&b) + ((a^b)>>1) 無溢位平均值。

此總結覆蓋 C 語言 90% 核心考點,建議收藏並定期複習,構建堅實知識骨架。

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