链表C ++中的内存地址

时间:2015-05-18 02:50:34

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

我在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”移动到某个寄存器,因此始终显示此地址而不是内存中的位置。这有意义吗?这是正确的还是我缺少的东西?这不会以任何方式影响我的实现,这只是一些我想更好理解的奇怪行为。

由于

1 个答案:

答案 0 :(得分:6)

您正在打印:

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

这是变量的地址:

struct node *cur;

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

"Current Add:\t" << cur << endl <<
相关问题