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

C語言系統學習筆記:從數據類型到函數指針的九天完整知識圖譜

     編輯:C 語言入門

學習路線圖總覽

本筆記將 C 語言核心知識點按邏輯依賴關係組織為九大模塊,涵蓋數據類型、控制流、數組/字符串、函數、結構體、指針、內存管理、函數指針,適合系統性重溫或面試速查。

DAY 1:數據類型與變量基礎

基本類型表(32/64 位差異)

類型32位字節64位字節格式符
char11%c
short22%hd
int44%d
long48%ld
float44%f
double88%lf(輸入)/%f(輸出)

關鍵點:long 隨架構變化;sizeof 編譯期確定;signed/unsigned 影響範圍不影響大小。

變量命名規範

  • 同一作用域唯一;字母/數字/下劃線,不以數字開頭;見名知意;避開關鍵字。

運算符優先級陷阱

  • ++/-- 前後綴區別;%/ 整數除法截斷;+= 等復合賦值含隱式轉換。
  • 邏輯運算短路求值:&& 左側假則右不算;|| 左側真則右不算 —— 性能優化技巧。

DAY 2:分支結構

  • if/else if/else 級聯;?: 三元運算符;switch-case 僅支持整型常量標籤,break 易漏導致貫穿。
  • enum 枚舉:符號常量,默認 0 起遞增,可手動指定值(enum Color {RED=1, GREEN, BLUE})。

DAY 3:循環結構

循環類型適用場景關鍵差異
for已知次數初始化/條件/增量集中
while未知次數,先判斷可能零次執行
do-while至少一次先執行後判斷

嵌套規律:外層控制行,內層控制列;外層一次,內層 N 次。

DAY 4:數組與字符串

數組定義三式

int a[4] = {1,2,3,4};  // 全量
int b[4] = {1};        // 部分,餘補 0
int c[] = {1,2,3};     // 自動推導長度 3

冒泡排序核心

for(i=0; i a[j+1]) swap;

字符串四大函數

  • strlen:有效長(遇 \0 止)
  • strcpy:複製含 \0,目標空間必須足夠
  • strcat:追加,同前提
  • strcmp:字典序比較,返回 <0/=0/>0

宏定義

#define PI 3.14
#define SUM(A,B) ((A)+(B))  // 參數加括號,整體加括號,防優先級錯誤

DAY 5:函數系統

四類函數原型

類型示例返回值處理
無參無返void print(void)無 return 或 return;
無參有返int getVal(void)必須 return 值;
有參無返void setVal(int x)同上
有參有返int add(int a,int b)同上

核心規則

  • 聲明在調用前(或定義前置);extern 可跨文件。
  • 參數傳遞 = 值拷貝(單向),形參改變不影響實參。
  • 函數可嵌套調用,不可嵌套定義(GCC 擴展除外)。

DAY 6:結構體

定義與訪問

struct Student { int id; char name[20]; float score; };
struct Student s1 = {1, "Tom", 90.5};
s1.id = 2;           // 成員訪問
struct Student *p = &s1;
p->score = 95.0;     // 指針訪問

內存對齊

結構體大小 = 成員大小之和 + 填充字節,按最大成員類型倍數對齊。#pragma pack(n) 可調整。

DAY 7:指針核心

指針運算本質

  • p+1 = 地址 + sizeof(*p),而非 +1 字節。
  • 數組名 = 首元素地址(常量指針),a[i] ≡ *(a+i)。
  • &a+1 跳過整個數組;&a[0]+1 跳過一個元素。

多級指針

int a=10, *p=&a, **pp=&p, ***ppp=&pp;
***ppp = 20; // 修改 a

DAY 8:內存管理五區模型

區域存放內容生命周期管理方式
代碼區二進制指令進程存續系統
常量區字面量、const 全局進程存續唯讀
靜態/全局區全局/靜態變量進程存續零初始化,一次分配
堆區malloc/free程序員控制手動申請/釋放,free 後置 NULL
棧區局部變量、參數、返回地址函數調用周期自動分配/釋放,~8MB 限制

動態分配函數族

  • malloc(size):未初始化
  • calloc(n, size):歸零初始化
  • realloc(ptr, newSize):擴/縮容,可能移動內存

DAY 9:函數指針與回調

定義語法

// 返回 int,兩 int 參數的函數指針類型
int (*pf)(int, int);  
// 別名簡化
typedef int (*PFUNC)(int, int);
PFUNC pf = add; // 指向函數
pf(3, 4);       // 調用

回調模式三步走

  1. 提取變化邏輯為獨立函數 callback()。
  2. 定義函數指針類型作參數 void process(PFUNC cb)。
  3. 調用時傳入函數地址 process(myCallback)。

應用場景:qsort 比較器、事件驅動、策略模式、異步通知。

知識圖譜連接圖

類型系統 → 變量/常量 → 運算式/語句 → 控制流(分支/循環)
    ↓
數組/字符串 → 結構體 → 指針 → 內存模型
    ↓
函數 → 函數指針 → 回調/多態雛形

總結

九天串聯起 C 語言「類型-內存-控制-抽象」四大支柱。建議配合 《C Primer Plus》/《C專家編程》 深化,並動手實現:動態數組、鏈表、簡易 Shell、內存池、回調框架。C 語言簡潔而深邃,掌握其核心模型,便掌握了計算機系統的通用語言。

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