指针和内存地址
计算机内存的组织方式
要理解指针,首先需要明确计算机内存的组织方式:计算机内存被划分为一个个连续的字节(Byte),每个字节都有一个唯一的编号,这个编号称为内存地址(类似门牌号)。例如,32 位系统的地址范围是0x00000000到0xFFFFFFFF(共 4GB),64 位系统则更大。
这里的4GB = 4 *1024 *1024 *1024 = ,所以32位系统有32个位,也就是4字节,
0x00000000到0xFFFFFFFF是8位16进制数,也就是8个4位二进制,也就是32位。
1个字节固定等于 8位二进制数(1 Byte = 8 bit),比如字节的最小值是 00000000 (0),最大值是 11111111 (255),所有数据在计算机中最终都以这种8位二进制形式存储。
用1位八进制“替代”3位二进制,因为 2³=8,3位二进制数刚好能表示0-7(1位八进制的范围)。1个字节(8位二进制)需拆成“3位+3位+2位”,对应 3位八进制数(不足补0)。
例:字节 10110101 (二进制)→ 拆为 010 110 101 → 对应八进制 265 。
可以观察到1字节拆成8进制会浪费最高位,不能整拆。
十六进制(16进制)与字节:用1位十六进制“替代”4位二进制,是最常用的字节简化格式。因为 2⁴=16,4位二进制数刚好能表示0-9、A-F(1位十六进制的范围)。1个字节(8位二进制)恰好拆成 2位十六进制数(前4位+后4位),无需补位,最简洁。
例:字节 10110101 (二进制)→ 拆为 1011 0101 → 对应十六进制 B5 。所以地址通常使用16进制
指针
而指针(Pointer) 本质是一种变量,但它存储的不是普通数据(如整数、字符),而是另一个变量的内存地址。简单说:
- 普通变量:存储 "数据值"(如
int a = 10;中,a存储10)。 - 指针变量:存储 "地址值"(如
int* p = &a;中,p存储a的内存地址)。
指针的大小:与类型无关,只与系统位数有关
指针存储的是内存地址,而地址的长度由系统位数决定:
- 32 位系统:地址是 32 位(4 字节),因此任何类型的指针大小都是 4 字节。
- 64 位系统:地址是 64 位(8 字节),因此任何类型的指针大小都是 8 字节。
32位映射是4GB,现代主要采用64位操作系统,因为64位对应16EB,远远超过日常所需。

浙公网安备 33010602011771号