C++指针
1. 一级指针
就是最普通的指针:存变量的地址。
int a = 10;
int* p = &a;
p是一级指针- 指向一个普通变量
- 解引用
*p拿到变量的值
一句话:
指向普通数据的指针。
2. 二级指针
指针的指针:存“一级指针”的地址。
int a = 10;
int* p = &a;
int** pp = &p;
pp是二级指针*pp得到p**pp得到a
常见用途:
- 二维数组
- 修改指针本身(比如函数内修改外部指针)
一句话:
指向指针的指针。
3. const 指针(三种,最容易混)
① 指针指向 const 数据
const int* p;
- 不能通过
*p修改值 - 指针本身可以变
② const 指针,指向普通数据
int* const p;
- 指针地址不能变
- 可以改
*p
③ 都不能改
const int* const p;
一句话记法:
const 在 * 左边 → 管数据;const 在 * 右边 → 管指针。
4. 函数指针
存“函数地址”的指针,用来间接调用函数。
int add(int a, int b) { return a + b; }
int (*fp)(int, int) = add;
fp(1, 2); // 调用 add
用途:
- 回调函数
- 函数表、策略模式
- 动态选择调用哪个函数
一句话:
指向函数的指针,能当函数用。
5. C++ 智能指针
自动管理内存,不用手动 delete,防止内存泄漏。
主要三个:
① unique_ptr<T>
- 独占所有权
- 不能拷贝,只能移动
- 最简单、最常用
unique_ptr<int> p = make_unique<int>(10);
② shared_ptr<T>
- 共享所有权
- 引用计数
- 最后一个持有者销毁时才释放
③ weak_ptr<T>
- 解决 shared_ptr 循环引用
- 不增加引用计数
一句话:
智能指针 = 带自动释放功能的安全指针。
精简总结
- 一级指针:指向普通变量
- 二级指针:指向指针
- const 指针:限制能不能改数据 / 改地址
- 函数指针:指向函数,实现回调
- 智能指针:自动管理内存,防泄漏

浙公网安备 33010602011771号