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

C語言核心知識體系總結:從基礎語法到指針內存完整筆記

     編輯:關於C語言

C語言核心知識體系總結:系統化筆記助力面試與工程實踐

C語言作為計算機系統基石,其知識點繁雜且深度十足。本文系統梳理從基礎語法、數據類型、控制流、數組指針、函數、結構體、鏈表、枚舉到內存模型的完整知識體系,每節包含核心概念、語法規則、易錯點、最佳實踐,適合面試複習、查漏補缺、工程查閱。

第一章:C語言概述與特點

  • 32個關鍵字、9種控制語句、34個運算符
  • 優勢:簡潔靈活、運算符豐富、數據結構完備、結構化控制、語法寬鬆、直接訪問硬件、生成代碼高效、可移植性強
  • 應用領域:操作系統、嵌入式、編譯器、數據庫、高性能計算、網絡服務

第二章:數據類型與運算符

基本類型大小(32位系統典型值):

類型大小範圍/精度格式符
char1B-128~127%c/%hhd
short2B-32768~32767%hd
int4B-2^31~2^31-1%d
long4B/8B平台相關%ld
float4B7位有效數字%f/%e/%g
double8B15-16位有效數字%lf/%e/%g
指針4B/8B地址空間%p

進制表示:八進制0前綴、十六進制0x前綴

補碼表示:原碼→反碼(符號位不變,其餘取反)→補碼(反碼+1)

第三章:輸入輸出與格式化

printf格式符核心:

  • %d/%ld:有符號十進制,%m.n寬度.精度,%-左對齊,%0零填充
  • %o/%x/%X:八/十六進制
  • %u:無符號十進制
  • %c/%s:字符/字符串
  • %f/%e/%g:浮點(定點/科學/通用)
  • %%:輸出%

scanf注意事項:地址傳遞&var、%*d跳過輸入、無精度控制、scanf_s需指定緩衝區大小

第四章:控制流語句

9種控制語句:if-else、switch-case、for、while、do-while、break、continue、goto、return

三大基本結構:順序、選擇、循環

條件運算符:expr1 ? expr2 : expr3

第五章:數組與字符串

數組特性:靜態定義、下標從0開始、二維數組行主序存儲、部分初始化餘位補0

字符串本質:字符數組以\0結尾、"abc"含隱式\0、'a'vs"a"區別

常用字符串函數:strlen/strcpy/strcat/strcmp/strchr/strstr、sprintf/sscanf格式化、大小寫轉換

第六章:函數與存儲類別

參數傳遞:值傳遞(單向)、數組名傳遞實為指針(可修改原數組)

存儲類別完整對比:

類別關鍵字作用域生存期存儲區默認值
自動auto塊內塊執行期間棧垃圾值
靜態局部static塊內程序全期靜態區0
寄存器register塊內塊執行期間寄存器/棧垃圾值
外部全局extern全程序(多文件)程序全期靜態區0
內部全局static當前文件程序全期靜態區0

遞歸:直接/間接自我調用、需基準情況、棧溢出風險

第七章:指針核心

核心概念:指針=地址、指針變量=存地址的變量、&取址、*解引用

指針運算:p+1按sizeof(*p)步進、p++移動到下一元素

數組與指針:a[i] ≡ *(a+i)、數組名退化為首元素指針、&a類型為int(*)[N]

二維數組指針:int (*p)[N]指向行、int *p[N]指針數組

字符串指針:char *p = "str"指向常量區、不可修改、char p[] = "str"棧上可修改

第八章:結構體與鏈表

結構體定義:struct Tag { members; };、變量定義struct Tag var;

指針訪問:p->member ≡ (*p).member、->優先級高

函數傳遞:值傳遞(拷貝整個結構)、指針傳遞(高效、可修改)

鏈表節點:struct Node { Data data; struct Node *next; };、動態分配、遍歷/插入/刪除

第九章:枚舉類型

特性:本質是整數常量、不可修改、可比較、switch適用

第十章:預處理與編譯流程

預處理指令:#define宏定義、#include文件包含、#ifdef/#ifndef/#endif條件編譯、#pragma編譯器指示

編譯四階段:預處理(.i)→編譯(.s)→汇編(.o)→鏈接(可執行文件)

第十一章:標準庫精選

  • <stdlib.h>:malloc/free/abs/atoi/qsort/bsearch
  • <string.h>:strlen/strcpy/strcat/strcmp/memcpy/memset
  • <math.h>:sin/cos/sqrt/pow/log
  • <time.h>:time/clock/difftime/strftime
  • <ctype.h>:isalpha/isdigit/toupper/tolower

第十二章:未定義行為(UB)與最佳實踐

常見UB:有符號溢出、空指針解引用、數組越界、使用未初始化值、重複釋放、嚴格別名違規、修改字符串常量

防禦性編程:

  • 編譯旗標:-Wall -Wextra -Werror -fsanitize=undefined,address
  • 斷言:assert(ptr != NULL)
  • 邊界檢查:if (idx >= 0 && idx < len)
  • 初始化:int x = 0; char *p = NULL;
  • 釋放後置空:free(p); p = NULL;

第十三章:調試與性能分析

  • GDB:break/run/next/step/print/watch/bt
  • Valgrind:--leak-check=full --track-origins=yes
  • Sanitizers:-fsanitize=address,undefined,leak
  • Perf:perf record -g ./prog && perf report
  • 靜態分析:Cppcheck、Clang Static Analyzer、Coverity

這份筆記提煉了C語言工程實踐中最高頻、最高價、最易錯的核心知識點。建議結合《C專家編程》、《C陷阱與缺陷》、《現代C語言編程》等經典著作深入研讀,並在實際項目中刻意練習指針操作、內存管理、並發控制等硬核技能。C語言學無止境,精進在堅持。

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