C 語言類型系統嚴謹而靈活,理解其分類體系是掌握類型轉換、指針運算、內存佈局的前提。本文梳理標準分類與常見別名。
基本類型 (Basic Types)
├── 整數類型 (Integer Types)
│ ├── 有符號 : signed char, short, int, long, long long (C99)
│ └── 無符號 : unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long
├── 字符類型 : char (實現定義有符號性), signed char, unsigned char
├── 浮點類型 (Floating Types)
│ ├── float (單精度, 通常 32 位 IEEE 754)
│ ├── double (雙精度, 通常 64 位 IEEE 754)
│ └── long double (擴展精度, 80/128 位)
└── 枚舉類型 : enum
派生類型 (Derived Types)
├── 指針類型 : T*
├── 數組類型 : T[N]
├── 結構體類型 : struct { ... }
├── 聯合體類型 : union { ... }
└── 函數類型 : 返回類型 + 參數類型列表
空類型 : void (不完整類型,不可實例化)
類型修飾符 (Qualifiers)
├── const (只讀)
├── volatile (易變)
├── restrict (C99, 無別名)
└── _Atomic (C11, 原子操作)
int 至少 16 位,通常 32 位;long 至少 32 位;long long 至少 64 位 (C99 引入);sizeof(char) == 1 (定義);sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long);float ≤ double ≤ long double 精度遞增;_Bool (C99) / bool (<stdbool.h>) 佔 1 字節,值 0/1。<stdint.h>, C99)| 類型 | 含義 |
|---|---|
int8_t, uint8_t | 精確 8 位有符號/無符號 |
int16_t, uint16_t | 精確 16 位 |
int32_t, uint32_t | 精確 32 位 |
int64_t, uint64_t | 精確 64 位 |
intptr_t, uintptr_t | 能容納指針的整數 |
intmax_t, uintmax_t | 最大寬度整數 |
最佳實踐:跨平台、網絡協議、文件格式、硬件寄存器操作**務必使用固定寬度類型**,避免 int/long 大小不一致導致的移植 Bug。
typedeftypedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD; // Windows 風格
typedef int32_t i32;
typedef uint64_t u64; // 現代風格
清晰的類型分類認知,能幫你在面對複雜聲明(如 int (*(*fp)[10])(void))時,按層級拆解、準確理解。