基本型別大小 (32/64 位系統差異)
| 型別 | 32位 (ILP32) | 64位 (LP64) | 備註 |
| char | 1 | 1 | 標準保證 1 byte |
| short | 2 | 2 | |
| int | 4 | 4 | 通常 4 bytes |
| long | 4 | 8 | **64位 Linux/macOS 為 8**,Windows 為 4 (LLP64) |
| long long | 8 | 8 | C99 保證 ≥ 8 |
| float | 4 | 4 | IEEE 754 single |
| double | 8 | 8 | IEEE 754 double |
| 指針 | 4 | 8 | 地址總線寬度 |
程式碼:輸出型別大小
#include
int main() {
printf("char: %zu\n", sizeof(char));
printf("short: %zu\n", sizeof(short));
printf("int: %zu\n", sizeof(int));
printf("long: %zu\n", sizeof(long));
printf("float: %zu\n", sizeof(float));
printf("double: %zu\n", sizeof(double));
printf("int*: %zu\n", sizeof(int*));
return 0;
}
- 使用
%zu (C99) 輸出 size_t,避免格式不匹配。
sizeof 是**編譯期運算子**,非函式,不計算副作用:sizeof(i++) 不會改變 i。
輸出指針地址
int sum = 99;
printf("sum address: %p\n", (void*)&sum); // 必須轉 void*,%p 要求 void*
// 輸出範例: 0x7ffd12345678 (64位十六進位)
%p 格式未標準化輸出格式 (通常十六進位、帶 0x)。
- 地址受 ASLR (位址空間佈局隨機化) 影響,每次執行不同。