【问题标题】:Memory address in linked list C++链表 C++ 中的内存地址
【发布时间】:2015-05-18 02:50:33
【问题描述】:

我用 C++ 创建了一个非常简单的链表示例来练习一些面试问题。我遇到了一个我似乎无法真正理解的奇怪问题:

while( cur )
{
    cout << "Index: " << indx << endl <<
        "Current Add:\t" << &cur << endl <<
        "Value:\t\t" << cur->val << endl <<
        "Next Add:\t" << &cur->next << endl << 
        "Ran Add:\t" << &cur->ran << endl <<
        "Ran Val:\t" << cur->ran->val << endl << endl;
    cur = cur->next;
    ++indx;
}

我正在使用此代码来遍历并打印列表。它工作正常。然而。当前节点的地址始终相同。该列表包含一个 int 值和一个指向下一个节点的指针以及一个指向列表中随机地址的指针。地址和值分配正确,我可以看到“下一个”地址。但是当它把它分配给当前节点时,它似乎总是指向同一个地址..

我唯一可以假设的是,在执行过程中,它会将“cur”移动到某个寄存器,因此总是显示这个地址而不是内存中的位置。这有意义吗?这是正确的还是我遗漏了什么?这不会以任何方式影响我的实现,它只是一些我想更好地理解的奇怪行为。

谢谢

【问题讨论】:

  • 当前节点的地址为cur的值。您正在打印&amp;cur - 变量cur 本身所在的地址。当然,cur 不会神奇地在内存中跳转——它的值会改变,但它的地址不会。

标签: c++ memory-management linked-list


【解决方案1】:

您正在打印:

"Current Add:\t" << &cur << endl <<

这是变量的地址:

struct node *cur;

该指针的地址(不是它指向的地址!)当然不会改变。你可能打算写:

"Current Add:\t" << cur << endl <<

【讨论】:

  • 天啊,当然是愚蠢的错误。感谢您的快速回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 2011-08-12
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2021-01-05
  • 2010-11-01
相关资源
最近更新 更多