本文梳理C語言核心知識點,涵蓋數據類型、控制流、函數、指針、內存模型、文件操作等,適合作為速查手冊或面試複習提綱。
| 類型 | 關鍵字 | 典型大小 | 範圍/說明 |
|---|---|---|---|
| 短整型 | short | 2字節 | 有符號:-2¹⁵~2¹⁵-1;無符號:0~2¹⁶-1 |
| 整型 | int | 4字節 | 有符號:-2³¹~2³¹-1;無符號:0~2³²-1 |
| 長整型 | long | 4/8字節 | 視平台(LP64/ILP32) |
| 單精度浮點 | float | 4字節 | ~7位有效數字 |
| 雙精度浮點 | double | 8字節 | ~15位有效數字 |
| 字符型 | char | 1字節 | 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(字符串→數值)。int a=10, *p=&a; // 正確
int *p; p=NULL; // 安全習慣
int *arr = (int*)malloc(10 * sizeof(int)); // 堆上分配10個int
// 使用...
free(arr); arr = NULL; // 釋放後置NULL,防野指針
calloc:分配並零初始化。realloc:調整已分配塊大小(可能移動地址)。void swap(int *a, int *b) { int t=*a; *a=*b; *b=t; } // 指針傳遞實現交換
fopen建立程序與文件聯繫,分配緩衝區。fgetc/fputc(字符)、fgets/fputs(行)、fread/fwrite(塊)、fscanf/fprintf(格式化)。fseek/ftell/rewind。fclose切斷聯繫,刷新緩衝區,釋放資源。文件分類:按介質(磁盤/磁帶)、按編碼(文本/二進制)。
#define PI 3.14、帶參宏#define MAX(a,b) ((a)>(b)?(a):(b))(全括號原則)。#ifdef/#ifndef/#endif 防止頭文件重複包含。.c獨立編譯為.o,鏈接器合併生成可執行文件。.h)僅放聲明(函數原型、extern變量、類型定義),.c放定義。static修飾函數/全局變量限制在本編譯單元可見。| 陷阱 | 正確做法 |
|---|---|
| 未初始化變量直接使用 | 定義時初始化或賦值後再用 |
scanf("%d\n",&a)導致卡死 | 去掉\n,用scanf("%d",&a) |
字符串未預留\0空間 | 數組長度 ≥ 字符串長度+1 |
free後指針未置NULL | free(p); p=NULL; |
| 結構體作為函數參數傳值導致拷貝開銷大 | 傳遞結構體指針 |
| 頭文件中定義變量/函數體 | 頭文件只放聲明,定義放.c |