2017-01-26 24 views
0

我不明白爲什麼t->next指向的地址不是t。如果t->next指針等於n的地址,並且t指針等於t->next的地址爲什麼t->next似乎指向不同的地址?我被困在這裏。指向一個地址的指針我沒想到

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 
+1

您沒有初始化'n-> next'。 –

回答

1

t = new Node之後給出以下每行進行以下更改。

內存分配對於n &噸。

 
n->+-----------+ t->+-----------+ 
    |data = ? |  |data = ? | 
    |next = ? |  |next = ? | 
    +-----------+  +-----------+ 

值分配給由n個引用的存儲器data元件。

n-data = 2; 
 
n->+-----------+ t->+-----------+ 
    |data = 2 |  |data = ? | 
    |next = ? |  |next = ? | 
    +-----------+  +-----------+ 

值分配給由噸引用的存儲器next元件。
而這恰好是n的位置。

t->next = n; 
 
n->+-----------+ t->+-----------+ 
    |data = 2 |  |data = ? | 
+->|next = ? |  |next = @n |--+ 
| +-----------+  +-----------+ | 
+-----------------------------------+ 

噸的價值重定向引用相同的存儲器中t.next(這是目前n)。
您應該注意到,您沒有設置n的next元素。

t = t->next; 
 
        vv orphan vv 
n->+-----------+  +-----------+ 
t->|data = 2 |  |data = ? | 
+->|next = ? |  |next = @n |--+ 
| +-----------+  +-----------+ | 
+-----------------------------------+ 

警告你也失去了你僅供參考在t = new Node;分配的內存位置。所以你有內存泄漏。

+0

也許要認識到的重要一點是,通過改變't',你可以有效地改變't-> data'和't-next' 。 –

+0

我選擇你的答案來解釋什麼是錯誤的視覺和一步一步。謝謝! – svb

3

首先,你確實有t->next == n所以他們應該指向同一個地址。然而,你進一步做t = t->next,所以t現在指向一個不同的節點(與指定的節點相同,具體爲n),其next未初始化,因此「隨機」值在輸出結束。如果只打印出t,則應該看到與第一個相同的值。

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->下一個 - 顯然是在別的地方。

順便說一句,繪製完整圖片後,列表很容易。這一切都變得清晰

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 

現在噸有數據5和它的下一個指針指向到n,其具有數據2

的n個點爲NULL下一指針;

相關問題