为何代码输出始终相同?含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
相关产品推荐
相关产品推荐

