持续填充...
C++ 中原值、源变量、指针、引用的关系
结构:
变量 --> 值 指针 --> 地址 --> 地址对应变量的值 引用 = 变量本身的地址总结:
| 概念 | 本质 | 示例 |
|---|---|---|
| 源变量 | 有名字的内存空间 | int a = 42; |
| 原值 | 变量中存储的实际数据 | 42 |
取地址& | 获取变量的内存地址 | &a→0x...b1c |
指针* | 存储地址的变量 | int* p = &a; |
案例
// 变量 int a = 42;int b = 21; // 变量a存储42,b为21 // 引用(取地址) std::cout << &a; // 输出类似 0x7ffd5e8a3b1c(a 的地址) // 指针 int* p = &a; // p 是一个指针,存储了 a 的地址 *p = 21; // 覆盖a的值 p = &b; // 覆盖p的指针指向的地址C++ 中const、const*、const&的区别与转换
总结
| 特性 | const int | const int* | int* const | const int& |
|---|---|---|---|---|
| 能否修改原值 | ❌ | ❌(通过该指针) | ✅ | ❌(通过该引用) |
| 能否改变指向/绑定 | — | ✅ 可以换目标 | ❌ 不能换目标 | ❌ 不能换目标 |
| 本质 | 只读变量 | 只读内容的指针 | 固定指向的指针 | 只读别名 |
变量
const int x = 10; // 锁定x的值指针
指向常量的指针
const int* p1=&a; // 锁定p1指定变量的值,但不锁p1本身所指向的变量 // 等价写法:int const* p1; p1 = &b; // 更换 p1自身指向的地址(变量)常量指针
int* const p2 = &a; //锁定 p2本身,但不锁定 *p2 = 32;都const
const int* const p3 = &a; // 两边都锁定引用
const int& ref = a; // 对变量的只读别名