我有一個非常簡單的鏈接列表。如果我通過引用傳遞我的列表,我的addNode(Node* &list, int value)
函數僅向鏈接列表添加新節點。如果我按價值通過我的列表,它不會:addNode(Node* list, int value)
。指針參數需要通過引用才能通過
我知道什麼pass by value
和pass by reference
是,但我認爲,一個指針函數參數本質上是通過引用傳遞,因爲指針指向的內存位置(是對實例的引用)。所以我認爲&
是多餘的是不是?或者我錯了?
class Node
{
public:
Node* next;
Node* prev;
int value;
Node(int nValue=0) : next(NULL), prev(NULL), value(nValue) { }
~Node() { cout << "Deleting " << value << endl; }
};
// Why do I need to pass by reference 'list'?
// If I dont then the variable 'linkedList' (in main) doesn't have nodes added to it
void addNode(Node* &list, int value)
{
Node* newNode = new Node(value);
newNode->prev = list;
list->next = newNode;
list = newNode;
}
int main()
{
Node* linkedList = new Node(1);
addNode(linkedList, 2);
// TODO: release memory
system("PAUSE");
return 0;
}
不要將指向**指針**的指針與指向**指向的**混淆。它的指針位於列表頭部,需要根據輸入/輸出參數進行更改。它指向的內容僅被修改爲設置指向新節點的指針。 – WhozCraig 2014-09-12 10:39:57
如果你的函數修改指針本身而不是指針值,那麼你需要通過引用來傳遞它。 – Medinoc 2014-09-12 10:54:05