C語言核心筆記 21 條:參數傳遞、數組指針、存儲類別、預處理、數據類型
整理自半年學習筆記,涵蓋 C 語言核心概念精華,適合速查與面試複習。
核心筆記清單
- 參數傳遞:C 語言只有值傳遞(按值調用)。指針傳遞本質是傳遞地址值。
- 函數原型:
返回類型 函數名(參數類型, ...),參數名可省略。
- 數組作參數:退化為指針,首維大小被忽略,需額外傳遞長度。多維數組除首維外必須指定大小。
- 函數不可嵌套定義:C 不支持巢狀函數(GCC 擴展除外)。
- 形式參數數組大小:編譯器不檢查,實參首地址傳給形參指針。
- 存儲方式:靜態存儲(全局/靜態變量,程序期)vs 動態存儲(棧/堆,按需分配)。
- static 局部變量:改變存儲期為靜態,保留值,作用域不變。
- static 全局變量/函數:內部鏈接,限制本文件可見。
- 寄存器變量:僅限局部變量和形參 (
register 關鍵字)。
- extern 聲明:引用外部定義,編譯期分配靜態存儲。
- extern 前向聲明:在定義前使用,或跨文件引用。
- 預處理命令:非 C 語言語句,以
# 開頭,編譯前處理。
- a[i] ≡ *(a+i):編譯器內部統一轉換,效率相同。
- Java 構造方法:不可繼承,子類需
super() 顯式調用父類帶參構造。
- Java 構造鏈:首句可為
this(...) 調用本類其他構造。
- C 數據類型四大類:基本(整/字/實/枚舉)、構造(數組/結構/共用體)、指針、空類型。
- Turbo C int 範圍:-32768~32767,溢出環繞。
- 整數後綴:
u/U → unsigned,l/L → long。
- 浮點精度:float 4字節 6-7位有效,double 8字節 15-16位。
- 浮點捨入誤差:
1.0/3*3 ≠ 1,實型常量默認 double。
- 後置自增優先級:
printf("%d", -i++) 先取值 3,後取負 -3,i 變 4。
重點補充
- 定義後使用:保證類型確定、編譯期分配存儲、合法性檢查
- 強制轉換優先級:
(int)a/1.5 先轉 int 再除,結果 2 而非 3
- 結構體對齊:
sizeof 受對齊影響,#pragma pack 可控制
- 位域:
struct { int a:3; int b:5; } 節省空間