You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何代码输出始终相同?含C++ for循环代码场景技术问询

为何循环中输出的地址始终一致?

嘿,我来帮你拆解这个问题!你代码里的核心问题在于你打印的不是堆内存的地址,而是局部变量的栈地址。

具体原因:

  • 你在循环体里定义的node* n是个局部变量,它存储在程序的栈内存区域。
  • 每次循环执行时,栈会为这个n分配一块空间;循环结束后,这块栈空间会被回收。
  • 当下一轮循环启动时,栈指针会回到之前的位置,重新给新的n分配完全相同的栈地址——这就是为什么你每次打印&n都会得到一模一样的值。

如果你想查看malloc分配的堆内存地址(也就是你实际创建的节点的地址),只需要修改打印的内容:

node* nn = (struct node*)malloc(sizeof(struct node));
for(int i=0;i<10;i++) {
    node* n = (struct node*)malloc(sizeof(struct node));
    cout << n << endl; // 打印堆上的节点地址,而非局部变量n的栈地址
    nn->next = n;
    nn = n;
}

小补充:在C++开发里,更推荐使用new来分配对象(比如node* n = new node;),不过这和你当前的地址问题无关,只是个实用小建议~

内容的提问来源于stack exchange,提问作者tarunkota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:16:01