第 3 章:指针与内存¶
📋 本章概览¶
| 项目 | 内容 |
|---|---|
| 学习时长 | 45 分钟 |
| 核心概念 | 地址、解引用、指针参数、动态内存 |
| 核心比喻 | 指针像写着房间地址的取件单,解引用才是真正取出物品 |
| 实践任务 | 动态创建数组并计算平均值 |
| 难度等级 | ★★★☆☆ |
指针不是“神秘的变量”,它只是保存地址的对象。真正重要的是:这个地址是否有效、类型是否匹配、生命周期是否结束。
3.1 取地址和解引用¶
int value = 42;
int *pointer = &value;
printf("%d\n", *pointer);
*pointer = 43;
printf("%d\n", value);
&value 取得地址,*pointer 访问该地址对应的值。
3.2 用指针修改调用者的数据¶
3.3 动态内存¶
#include <stdlib.h>
int *values = malloc(3 * sizeof(*values));
if (values == NULL) {
return 1;
}
values[0] = 10;
free(values);
values = NULL;
每次 malloc 都必须有对应的 free。释放后把指针设为 NULL,可以减少误用悬空指针的风险。
✅ 验证步骤¶
用 AddressSanitizer 运行程序,验证正常路径会释放内存;故意制造越界或重复释放后,记录工具报告的线索。
📝 本章总结¶
- 指针保存地址,解引用才会访问地址对应的值。
- 动态内存必须成对管理:分配后释放。
- 释放后避免继续使用原地址。
✏️ 课后练习¶
使用 malloc 创建一个由用户指定长度的整数数组,读取数据并计算平均值;检查分配失败,并在所有返回路径释放内存。
🔮 下一章预告¶
下一章会把多个字段组合成结构体,并把数据保存到文件中。