指標本質是 記憶體位址的容器。在 32 位架構 (IA-32, ARMv7 等) 上:
| 架構 | 位址總線 | 指標大小 | 虛擬位址空間 | 常見資料模型 |
|---|---|---|---|---|
| x86-64 (LP64) | 48 位 (擴展至 52/57 位) | 8 字節 | 256 TiB / 4 PiB / 128 PiB | Linux/macOS/BSD: long=8, pointer=8 |
| Windows x64 (LLP64) | 48 位 | 8 字節 | 256 TiB | long=4, long long=8, pointer=8 |
| ILP32 (32 位) | 32 位 | 4 字節 | 4 GiB | int=long=pointer=4 |
在 16 位 DOS/8086 時代,記憶體分段導致:near pointer (2 字節,段內偏移)、far pointer (4 字節,段:偏移)、huge pointer (4 字節,正規化遠指標)。現代平坦記憶體模型已淘汰此概念。
#include <stdio.h>
int main() {
printf("char* : %zu\n", sizeof(char*));
printf("int* : %zu\n", sizeof(int*));
printf("double* : %zu\n", sizeof(double*));
printf("void* : %zu\n", sizeof(void*));
printf("int(*)() : %zu\n", sizeof(int(*)()));
return 0;
}
// 32 位輸出全為 4;64 位輸出全為 8