【C++基础知识】最通俗的方式来解释指针和地址中的 `*` 和 `&

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 = &num; // p 保存了 num 的地址(p指向num)
    cout << "p指向的值:" << *p << endl; // 输出:10
    
    效果:你拿着编号 0x1234p)去找快递柜,打开格子拿到里面的 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. 常见误区

  1. * 的两种含义

    • 在声明时:int* p 表示 p 是一个指针(用来存地址的变量)。
    • 在使用时:*p 表示解引用(拿指针指向的值)。
  2. & 不能乱用

    int num = 10;
    int* p = &num; // 正确:p 存的是地址
    int x = &num;  // 错误!不能把地址直接赋值给普通变量
    

理解了没?指针其实就是 “记住地址 + 按地址找东西”& 是问地址,* 是按地址找值!


【技术人的鼓励】❤️ 如果这篇文章对您有帮助,欢迎点击打赏按钮支持博主!您的鼓励是我持续输出优质技术内容的动力,哪怕只是1元也足以让我感受到这份珍贵的认可。💰


「想解锁更多现代C++黑科技?点击关注公众号【指针诗笺】,获取独家性能优化秘籍与C++编程实战指南!」
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐怡旸--指针诗笺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值