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

C語言核心知識體系總結:從基礎語法到內存管理

     編輯:關於C語言

C語言核心知識體系總結:從基礎語法到內存管理

本文梳理C語言核心知識點,涵蓋數據類型、控制流、函數、指針、內存模型、文件操作等,適合作為速查手冊或面試複習提綱。

一、基本數據類型與關鍵字

類型關鍵字典型大小範圍/說明
短整型short2字節有符號:-2¹⁵~2¹⁵-1;無符號:0~2¹⁶-1
整型int4字節有符號:-2³¹~2³¹-1;無符號:0~2³²-1
長整型long4/8字節視平台(LP64/ILP32)
單精度浮點float4字節~7位有效數字
雙精度浮點double8字節~15位有效數字
字符型char1字節ASCII字符或小整數
布爾型_Bool/bool(C99)1字節0/1
空類型void—無返回值函數、通用指針

修飾符:signed/unsigned、const、volatile、static、extern、register、auto。
類型別名:typedef。
運算符:算術(+=/-=)、自增減(前/後綴區別)、關係、邏輯、位運算、sizeof。

二、控制流語句

  • 選擇:if-else if-else、switch-case-default(break防止貫穿)。
  • 循環:for、while、do-while;break跳出、continue進入下一輪。
  • 跳轉:goto(慎用)、return。

三、數組與字符串

  • 定義:int a[10]; char str[]="hello";(不指定長度須初始化)。
  • 初始化:int a[10]={0}; 全零初始化(僅定義時有效)。
  • 字符串結束標誌:\0。
  • 常用轉換:atoi/atol/atof(字符串→數值)。

四、指針與內存管理(核心難點)

1. 指針本質

  • 指針 = 變量地址,有類型(指向何種類型地址)。
  • 野指針:未初始化指針指向未知內存,解引用導致未定義行為。定義即初始化為NULL。
int a=10, *p=&a; // 正確
int *p; p=NULL;    // 安全習慣

2. 動態內存分配

int *arr = (int*)malloc(10 * sizeof(int)); // 堆上分配10個int
// 使用...
free(arr); arr = NULL; // 釋放後置NULL,防野指針
  • calloc:分配並零初始化。
  • realloc:調整已分配塊大小(可能移動地址)。

3. 參數傳遞:值傳遞 vs 指針傳遞

  • 值傳遞:形參獲取實參副本,函數內修改不影響實參。
  • 指針傳遞:傳遞地址,函數內可修改實參指向的內存,改動持久化。
void swap(int *a, int *b) { int t=*a; *a=*b; *b=t; } // 指針傳遞實現交換

五、文件操作流程

  1. 打開:fopen建立程序與文件聯繫,分配緩衝區。
  2. 讀寫:fgetc/fputc(字符)、fgets/fputs(行)、fread/fwrite(塊)、fscanf/fprintf(格式化)。
  3. 定位:fseek/ftell/rewind。
  4. 關閉:fclose切斷聯繫,刷新緩衝區,釋放資源。

文件分類:按介質(磁盤/磁帶)、按編碼(文本/二進制)。

六、預處理與大程序結構

  • 宏定義:#define PI 3.14、帶參宏#define MAX(a,b) ((a)>(b)?(a):(b))(全括號原則)。
  • 條件編譯:#ifdef/#ifndef/#endif 防止頭文件重複包含。
  • 編譯單元:每個.c獨立編譯為.o,鏈接器合併生成可執行文件。
  • 頭文件(.h)僅放聲明(函數原型、extern變量、類型定義),.c放定義。
  • static修飾函數/全局變量限制在本編譯單元可見。

七、避坑速查表

C語言雖小,五臟俱全。掌握內存模型、指針運算、編譯鏈接機制,即掌握了通往系統級開發的鑰匙。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
陷阱正確做法
未初始化變量直接使用定義時初始化或賦值後再用
scanf("%d\n",&a)導致卡死去掉\n,用scanf("%d",&a)
字符串未預留\0空間數組長度 ≥ 字符串長度+1
free後指針未置NULLfree(p); p=NULL;
結構體作為函數參數傳值導致拷貝開銷大傳遞結構體指針
頭文件中定義變量/函數體頭文件只放聲明,定義放.c