1. 内存就像快递柜
想象电脑的内存是一个超大快递柜,每个格子有一个编号(地址),里面存放着你的数据(比如一个数字、一个字母)。
- 变量:比如你有一个变量
int num = 10
,相当于把10
存进了某个格子(比如编号0x1234
)。 - 地址:这个格子的编号
0x1234
就是num
的地址。
2. &
的作用:查快递柜编号
&变量
:用来获取变量的地址(快递柜编号)。
效果:就像你问快递柜管理员:“int num = 10; cout << "num的值:" << num << endl; // 输出:10 cout << "num的地址:" << &num << endl; // 输出:0x1234(假设的地址)
num
放在哪个格子?”管理员告诉你编号0x1234
。
3. *
的作用:根据编号取快递
*地址
:用来通过地址找到实际存储的值(打开格子拿快递)。
效果:你拿着编号int* p = # // p 保存了 num 的地址(p指向num) cout << "p指向的值:" << *p << endl; // 输出:10
0x1234
(p
)去找快递柜,打开格子拿到里面的10
。
4. 对比 *
和 &
操作 | 代码示例 | 作用 | 类比 |
---|---|---|---|
取地址 | &num | 获取变量 num 的内存地址 | 问管理员快递柜编号 |
解引用 | *p | 通过指针 p 拿到它指向的值 | 用编号打开柜子取快递 |
5. 通俗例子
int main() {
int wallet = 100; // 钱包里有100块
int* p = &wallet; // p 记录钱包的地址(记下柜子编号)
cout << "钱包里的钱:" << wallet << endl; // 直接看钱包 → 100
cout << "钱包的地址:" << &wallet << endl; // 问钱包在哪 → 0x1234
cout << "通过p找到的钱:" << *p << endl; // 按地址找钱 → 100
*p = 200; // 通过地址修改钱包里的钱(往柜子里塞200块)
cout << "现在钱包里的钱:" << wallet << endl; // 输出:200
}
6. 一句话总结
&
:“在哪里?” → 取地址。*
:“那里有什么?” → 解引用(通过地址拿值)。
就像你朋友说:“我钱放在快递柜里了,编号是 0x1234
。”
&钱包
:你问他“钱包放哪了?”他告诉你编号0x1234
。*p
:你拿着编号0x1234
去打开柜子,拿到钱。
7. 常见误区
-
*
的两种含义:- 在声明时:
int* p
表示p
是一个指针(用来存地址的变量)。 - 在使用时:
*p
表示解引用(拿指针指向的值)。
- 在声明时:
-
&
不能乱用:int num = 10; int* p = # // 正确:p 存的是地址 int x = # // 错误!不能把地址直接赋值给普通变量
理解了没?指针其实就是 “记住地址 + 按地址找东西”,&
是问地址,*
是按地址找值!
【技术人的鼓励】❤️ 如果这篇文章对您有帮助,欢迎点击打赏按钮支持博主!您的鼓励是我持续输出优质技术内容的动力,哪怕只是1元也足以让我感受到这份珍贵的认可。💰
「想解锁更多现代C++黑科技?点击关注公众号【指针诗笺】,获取独家性能优化秘籍与C++编程实战指南!」