Kaminora 2024-05-28 08:46 采纳率: 100%
浏览 6
已结题

&a和*a实例里有点地方不懂

代码:
int a = 10;
int *b = &a;
printf(“%d\n”, a);
printf(“%d\n”, &a);
printf(“%d\n”, b);
printf(“%d\n”, *b);

结果:
10
6487620
6487620
10

问题:
为什么前面设的 * b =&a,
但 * b 输出值是10,&a输出值是6487620。
正确含义的写法是否该是int* b(知道int *b也能实现)

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 08:46
    关注

    引自免费微信小程序:皆我百晓生

    在C++中,&运算符用于获取变量的地址,而*运算符用于访问指针所指向的内存中的值。让我们逐步解析您提供的代码和输出结果。

    首先,我们定义了一个整型变量 a 并赋值为10:

    int a = 10;
    

    接下来,我们创建了一个整型指针变量 b,并将其指向 a 的地址:

    int *b = &a;
    

    这里,&aa 变量的地址,它是一个内存位置,例如 6487620(这只是一个示例数值)。我们将这个地址赋给了指针变量 b

    然后我们开始打印不同的值:

    1. 当你打印 a 时,实际上你在打印变量 a 的值,即 10。
    2. 当你打印 &a 时,你得到的是 a 变量的地址,也就是内存位置,这是正常的,因为你明确地请求了地址。
    3. 当你打印 b 时,你实际上是打印指针变量 b 自身,而不是它所指向的值。由于 b 指向 a 的地址,所以它的值也是 6487620,与之前的 &a 输出相同。
    4. 最后,当打印 *b 时,你是在通过指针 b 访问其指向的值,也就是 a 变量的值,因此输出是 10。

    总结一下,正确的理解应该是这样的:

    • a*b 都代表变量 a 的值,即 10。
    • &ab 分别表示变量 a 的地址,即内存位置,比如 6487620

    如果你想确保指针变量的声明更加清晰,可以这样写:

    int *b = &a; // 这里的 int *b 可以省略,因为 C++ 可以推断出指针类型
    

    这是因为在 C++ 中,如果初始值是某个变量的地址,那么编译器会自动推断出指针的数据类型。所以,int *b 等同于 b,并且在这个上下文中,它们都是正确的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 修改了问题 5月28日
  • 修改了问题 5月28日
  • 展开全部

悬赏问题

  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了