1. 指针、地址与值的概念辨析
第一次接触指针概念的初学者,常常会被这三个术语绕得晕头转向。我在刚学C语言时,也曾花了整整两周时间才彻底理清它们之间的关系。指针(Pointer)、地址(Address)和值(Value)是计算机内存操作的三个核心概念,理解它们的区别是掌握底层编程的关键。
简单来说:
- 值是存储在内存中的实际数据
- 地址是值在内存中的位置编号
- 指针是一个特殊变量,它存储的是地址而非值本身
举个例子,当你声明一个普通变量int a = 42;时:
42是这个变量的值&a会获取这个值所在的内存地址(比如0x7ffeee2b5a4c)- 而指针
int *p = &a;则把地址保存起来,通过它可以间接访问值
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 内存模型深度解析
2.1 计算机内存的组织方式
计算机内存可以想象成一个巨大的酒店,每个房间都有:
- 唯一的房间号(地址)
- 房间内住着客人(值)
- 前台登记表记录着房间号和客人信息(指针)
当执行int b = 10;时:
- 系统在"酒店"中分配一个空房间(假设房间号0x1000)
- 把值10放进这个房间
- 变量名b就是这个房间的别名
2.2 指针的特殊性
指针变量本身也占用内存空间,但它存储的是其他变量的地址而非普通值。这就像酒店前台的登记表:
- 登记表本身也占用柜台空间(指针自身的内存)
- 但登记表上写的是其他房间的号码(存储的地址)
- 通过查登记表可以找到目标房间(解引用指针)
c复制int x = 100; // 房间0x2000住着客人100
int *px = &x; // 前台登记表记录:0x2000
printf("%d", *px); // 查登记表找到0x2000房间的客人
3. 三者的操作差异
3.1 取地址与解引用操作
操作符&和*是理解三者关系的关键:
| 操作 | 作用 | 示例 |
|---|---|---|
&变量 |
获取变量的内存地址 |
