我在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”移动到某个寄存器,因此始终显示此地址而不是内存中的位置。这有意义吗?这是正确的还是我缺少的东西?这不会以任何方式影响我的实现,这只是一些我想更好理解的奇怪行为。
由于
答案 0 :(得分:6)
您正在打印:
"Current Add:\t" << &cur << endl <<
这是变量的地址:
struct node *cur;
该指针的地址(不是它指向的地址!)当然不会改变。你可能打算写:
"Current Add:\t" << cur << endl <<