指针和内存地址

计算机内存的组织方式

        要理解指针,首先需要明确计算机内存的组织方式:计算机内存被划分为一个个连续的字节(Byte),每个字节都有一个唯一的编号,这个编号称为内存地址(类似门牌号)。例如,32 位系统的地址范围是0x000000000xFFFFFFFF(共 4GB),64 位系统则更大。  

        这里的4GB = 4 *1024 *1024 *1024 = 2^{32},所以32位系统有32个位,也就是4字节,0x000000000xFFFFFFFF是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,远远超过日常所需。

posted @ 2025-11-21 15:22  mc12356  阅读(51)  评论(0)    收藏  举报  来源