sizeof 核心特性
sizeof 是編譯期運算子,非函式
- 回傳類型為
size_t(無號整數),格式化列印建議用 %zu(C99)或 %lu 強轉
- 不計算運算式副作用:
sizeof(i++) 不會讓 i 遞增
完整程式碼
#include <stdio.h>
int main()
{
printf("基本類型位元組長度 (本機環境):\n");
printf("char : %zu bytes\n", sizeof(char));
printf("short : %zu bytes\n", sizeof(short));
printf("int : %zu bytes\n", sizeof(int));
printf("long : %zu bytes\n", sizeof(long));
printf("long long : %zu bytes\n", sizeof(long long));
printf("float : %zu bytes\n", sizeof(float));
printf("double : %zu bytes\n", sizeof(double));
printf("long double: %zu bytes\n", sizeof(long double));
printf("void* : %zu bytes\n", sizeof(void*));
return 0;
}
常見平台結果對比 (64-bit Linux/Windows/macOS)
| 類型 | 64-bit Linux/macOS | 64-bit Windows (MSVC) |
| char | 1 | 1 |
| short | 2 | 2 |
| int | 4 | 4 |
| long | 8 | 4 |
| long long | 8 | 8 |
| float | 4 | 4 |
| double | 8 | 8 |
| 指標 | 8 | 8 |
教學重點
long 在 Windows 為 4 bytes,Linux/macOS 為 8 bytes —— 跨平台程式請用 int32_t/int64_t(stdint.h)
sizeof 陣列參數退化為指標時會失去長度資訊
- 結構體因對齊可能大於成員總和