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 指针:限制能不能改数据 / 改地址
  • 函数指针:指向函数,实现回调
  • 智能指针:自动管理内存,防泄漏
posted @ 2026-04-01 20:03  道长不姓王  阅读(33)  评论(0)    收藏  举报