KyrieChao

2026-08-19 周三 · 二级指针与内存管理

2026-08-19

技术

C 语言

学习内容:C 语言 Day18 笔记——二级指针与内存管理

二级指针和多级指针

二级指针(double pointer):表示一个指针类型数据的内存地址(指向指针的指针)。三级指针表示二级指针的地址,以此类推,统称多级指针。

short s = 0x1234;

short* p1  = &s;     // 一级指针,指向 short
short** p2 = &p1;    // 二级指针,指向 short*
short*** p3 = &p2;   // 三级指针,指向 short**
short**** p4 = &p3;  // 四级指针,指向 short***

**p2 += 5;   // 解引用两次回到 s,等价于 s += 5;
--***p3;     // 解引用三次回到 s,等价于 --s;

解引用层级:*p2 得到 p1(一级指针),**p2 才得到最终的 s。多级指针就是"指针的指针的指针…",每多一级就多一层间接寻址。

内存管理(Memory Management)

操作系统给每个进程分配一块独立的私有地址空间,又分为几个区域:

区域 存放内容
栈区(stack) 局部变量、函数调用(形参、返回地址)
堆区(heap) 动态分配的内存(malloc/free)
静态存储区(static) 全局变量、静态变量
常量区(constant) 字符串字面量、常量
代码区(text) 程序的机器指令(函数体)

之前学过的知识点在这里串起来了:局部变量在栈区(函数结束即释放,所以不能返回其指针);字符串字面量在常量区(只读,修改会段错误);函数在代码区(所以有函数指针);malloc 在堆区(手动申请/释放)。

链表练习(test.c)

今日继续练习链表,test.c 里对比了两套实现:

  • link.c / link.h:单向链表简洁版,函数名不带前缀——create / insert_head / insert_tail / show / find / reverse / delete / destroy
  • list.c / list.h:单向链表 + 循环链表完整版(link_xxx 与 clink_xxx 两套)
  • main.c:测试用例(创建 → 尾插 → 头插 → 反转 → 删除 → 查找 → 销毁)

核心操作全部覆盖:头插、尾插、打印、反转、查找、删除、销毁;循环链表版用 head->next == head 判断遍历终点。

Rust

无。

思考

无。

明日计划

  1. C 语言:结构体(struct)、动态内存分配深入(malloc/free)、字符串库函数
  2. Rust:恢复学习节奏