我不明白为什么t->next
指向的地址与t
不同。如果t->next
指针等于n
的地址且t
指针等于t->next
的地址,为什么t->next
似乎指向不同的地址ADRESS?我被困在这里。
struct Node {
int data;
Node* next;
};
int main() {
Node* n;
Node* t;
Node* h;
n = new Node;
t = new Node;
n->data = 2;
t->next = n;
t = t->next;
cout << n << "\n" << n->data << "\n" << t << "\n" << t->next << endl;
}
输出:
0x7a11c8 2 0x7a11c8 0x65685372
答案 0 :(得分:3)
首先,你确实有t->next == n
所以他们应该指向同一个地址。但是,您进一步执行t = t->next
,因此t
现在指向另一个节点(指向n
的同一节点,具体而言)并且其next
未初始化,因此,“随机”值位于输出的末尾。如果只打印t
,您应该看到与第一个相同的值。
答案 1 :(得分:1)
在data
以下各行之后,如下所示进行以下更改。
为n&amp;分配的内存吨。强>
n->+-----------+ t->+-----------+ |data = ? | |data = ? | |next = ? | |next = ? | +-----------+ +-----------+
分配给n。
引用的内存的n-data = 2;
元素的值
next
n->+-----------+ t->+-----------+ |data = 2 | |data = ? | |next = ? | |next = ? | +-----------+ +-----------+
分配给t引用的t->next = n;
内存元素的值。
而这恰好是n的位置。
t.next
n->+-----------+ t->+-----------+ |data = 2 | |data = ? | +->|next = ? | |next = @n |--+ | +-----------+ +-----------+ | +-----------------------------------+
重定向到引用与n
相同的内存(当前为next
)的值。
你应该注意到,你没有设置n的t = t->next;
元素。
t = new Node;
vv orphan vv n->+-----------+ +-----------+ t->|data = 2 | |data = ? | +->|next = ? | |next = @n |--+ | +-----------+ +-----------+ | +-----------------------------------+
警告 您还失去了{{1}}中分配的内存位置的唯一引用。所以你有内存泄漏。
答案 2 :(得分:0)
这应该是这样的。
您执行t = t->next
- 之后,n == t
。但是,您要求t->next
未设置
示例代码:
t->next = n; // t->next == n
t = t->next; // t == t->next == n
// calling t->next
std::cout << t; // t == n
std::cout << t->next; // the same as n->next or t->next->next for previous state of t
所以你看到的是:n指向与t相同的位置。 t-&gt; next - 显然在其他地方。
顺便说一句,绘制完整张图后,列表很容易。一切都变得清晰
答案 3 :(得分:0)
这是链表的基础,一个类包含指向同一个类的另一个对象的指针,因此指针n具有数据和下一个对象的地址,下一个对象也是相同的行为等等......
Node* n;
Node* t;
n = new Node;
n->data = 2;
n->next = NULL;
t = new Node;
t->data = 5;
t->next = n; // link the nodes
//t = t->next; // why this it like moving in linked list through nodes
现在t有数据5,它的下一个指针指向n,它有数据2
n的下一个指针指向NULL;