这是本文档旧的修订版!
指针(Pointer)就是“地址变量”——它里面不存具体数据,而存数据在内存中的门牌号。 通过门牌号,你能找到、读取、修改那间“房子”里的内容,也能在函数间、动态内存中低成本传递大块数据。
—
### 1. 三句话核心 1. 指针 = 内存地址 2. `*` 出现在声明时,表示“这是指针”;出现在使用时,表示“取门牌号里的东西” 3. `&` 出现在变量前,表示“把门牌号拿出来”
—
### 2. 最小例子 ```cpp int a = 42; 普通变量,房里有 42 int* p = &a; p 是一个 int* 指针,存了 a 的地址 *p = 100; 把门牌号里的内容改成 100 cout « a; 输出 100 ```
—
### 3. 图示(32/64 位系统)
| 变量 | 内容(示意) | 含义 |
| — | — | — |
| `a` | `42` | 真正数据 |
| `p` | `0x7ffd'fc124c` | 指向 a 的地址值 |
—
### 4. 两个运算符
| 符号 | 读法 | 作用 |
| — | — | — |
| `&` | “取址” | 拿到变量的地址 |
| `*` | “解引用” | 拿到地址指向的变量本身 |
—
### 5. 常见分类
| 名称 | 声明示例 | 说明 |
| — | — | — |
| 对象指针 | `int* p` | 指向一个 `int` |
| 函数指针 | `int (*fp)(double)` | 指向一个函数 |
| 指针的指针 |