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

C語言基礎知識體系總覽:從 Hello World 到指針、結構體、文件操作的完整知識圖譜

     編輯:C 語言入門

知識體系導航圖

C語言核心
├─ 程序結構:main、預處理、編譯鏈接
├─ 類型系統:基本類型、派生類型(數組/指針/結構體/聯合/枚舉)
├─ 內存模型:五區、存儲類別、對齊、動態分配
├─ 控制流:語句、分支、循環、跳轉
├─ 函數機制:定義/聲明/調用、參數傳遞、遞歸、函數指針
├─ 模塊化:多文件、頭文件、靜態/外部鏈接、make/CMake
├─ 標準庫:IO、字符串、數學、時間、斷言、錯誤處理
└─ 進階主題:位運算、可變參數、內聯彙編、嵌入式/系統編程

模塊 1:入門第一課

#include    // 引入標準 IO 庫頭文件
int main(void) {      // 程序入口,返回 int
    printf("Hello, C\n"); // 格式化輸出
    return 0;         // 0 表示成功
}
  • #include:預處理指令,展開頭文件內容。
  • stdio.h:Standard Input Output,提供 `printf/scanf/FILE` 等。
  • main:唯一入口,宿主環境調用,返回值傳遞給作業系統。

模塊 2:基本數據類型與變量

類別關鍵字典型大小(64位)格式符範圍/精度
字符char1B%c-128~127 或 0~255
整數short/int/long/long long2/4/8/8B%hd/%d/%ld/%lld有符號/無符號
浮點float/double/long double4/8/16B%f/%lf/%Lf7/15/19 有效位
布爾_Bool (stdbool.h: bool)1B%d0/1
無類型void--函數無返、通用指針

關鍵點:`sizeof` 編譯期常量;`signed/unsigned` 修飾整數;變量定義 = 聲明 + 分配內存 + 可選初始化。

模塊 3:指針——C 語言靈魂

核心三元組

  1. 地址:`&var` 取變量地址。
  2. 指針變量:`int *p = &a;` 存儲地址,基類型 `int` 決定步長與解引用類型。
  3. 解引用:`*p` 訪問目標對象,左值可賦值,右值取值。

進階形態

  • 指針算術:`p+n` 按 `sizeof(*p)` 步進。
  • 多級指針:`int **pp = &p;` 修改指針本身。
  • 數組指針:`int (*p)[N] = &arr;` 指向整個數組。
  • 指針數組:`int *p[N];` 每個元素是指針。
  • 函數指針:`int (*pf)(int,int);` 回調、策略模式。
  • void*:通用指針,隱式轉換,泛型容器基石。

模塊 4:結構體——異構聚合

struct Student {
    int id;
    char name[20];
    float score;
    struct Date { int y,m,d; } birthday; // 嵌套
};
struct Student s = {1, "Tom", 90.5, {2000,5,1}};
s.score = 95;           // 成員訪問
struct Student *ps = &s;
ps->name[0] = 'J';      // 指針訪問

內存對齊

結構體大小 = 成員大小和 + 填充。`#pragma pack(n)` 控制對齊,`offsetof` 獲取偏移。

模塊 5:數組與字符串

  • 一維/多維數組:連續內存,下標訪問 `a[i][j]` ≡ `*(*(a+i)+j)`。
  • 字符串 = 以 `\0` 結尾的字符數組。字面量 `"abc"` 存唯讀區,`char s[]="abc"` 複製到棧。
  • 核心函數:`strlen/strcpy/strcat/strcmp` (``),`printf/scanf %s`。
  • 安全第一:`scanf("%19s", buf)`、`strncpy`、`snprintf`、`fgets`。

模塊 6:函數與模塊化

四類原型

類型示例
無參無返void hello(void)
無參有返int get_val(void)
有參無返void set_val(int x)
有參有返int add(int a,int b)

參數傳遞 = 值拷貝

形參修改不影響實參。需修改實參 → 傳指針。數組退化為指針傳遞。

聲明與定義分離

// add.h
int add(int a, int b);
// add.c
int add(int a, int b) { return a+b; }
// main.c
#include "add.h"

模塊 7:文件操作——持久化 IO

核心流程

FILE *fp = fopen("data.txt", "r"); // 打開,模式: r/w/a/r+/w+/a+
if (!fp) { perror("fopen"); return 1; }

// 文本模式
fprintf(fp, "%d %s\n", 42, "hello"); // 格式化寫
fscanf(fp, "%d %s", &x, buf);        // 格式化讀
fgets(buf, sizeof(buf), fp);         // 讀整行
fputs(buf, fp);                      // 寫字符串

// 二進制模式
fwrite(buf, sizeof(int), n, fp);     // 批量寫
fread(buf, sizeof(int), n, fp);      // 批量讀

// 定位
fseek(fp, 0, SEEK_END);  // 移至末尾
long pos = ftell(fp);    // 獲取位置
rewind(fp);              // 回開頭

fclose(fp); // 必須關閉,刷新緩衝區

模式速查

模式含義文件不存在文件存在可讀/可寫
`r`只讀失敗打開R/-
`w`只寫創建截斷(清空)- /W
`a`追加創建打開,指針在末尾- /W
`r+`讀寫失敗打開R/W
`w+`讀寫創建截斷R/W
`a+`讀追加創建打開,指針末尾R/W

二進制模式加 `b`:`rb`、`wb` 等,Windows 關鍵(抑制 `\n`↔`\r\n` 轉換)。

模塊 8:預處理與編譯鏈接

  • #define 宏:對象宏/函數宏,參數加括號,整體加括號。
  • #include:`< >` 系統路徑,`" "` 當前目錄優先。
  • #ifdef/#ifndef/#endif:條件編譯,防止重複包含。
  • 編譯四階段:預處理 `.i` → 編譯 `.s` → 汇編 `.o` → 鏈接可執行文件。
  • 靜態庫 `.a/.lib`、動態庫 `.so/.dll`,鏈接時/載入時解析符號。

模塊 9:調試與構建工具

  • GDB:`break`、`run`、`next/step`、`print`、`bt`、`watch`。
  • Valgrind:`memcheck` 檢測內存泄漏/越界、`helgrind` 檢測競態。
  • 編譯器警示:`-Wall -Wextra -Werror -pedantic -std=c11`。
  • 構建:Makefile / CMake / Meson,管理多文件依賴、編譯選項、安裝。

總結:從語法到工程的棧式能力模型

語法基礎 → 內存模型指針 → 數據結構封裝 → 標準庫熟練
    ↓              ↓              ↓              ↓
預處理/編譯鏈接 → 調試/靜態分析 → 模塊化設計 → 性能調優/移植
    ↓              ↓              ↓              ↓
嵌入式/系統級開發 ← 操作系統內核 ← 編譯器/運行時 ← 高性能計算

C 語言小而美,核心概念有限但組合威力無窮。建議學習路徑:語法速通 → 指針/內存深度實踐 → 數據結構手寫庫 → 多文件項目 → 系統編程(APUE/UNIX網絡編程) → 內核/編譯器/虛擬機。

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