我有一个非常简单的链表。我的addNode(Node* &list, int value)
如果我通过引用传递列表,函数只会将新节点添加到我的链接列表中。如果我按值传递列表,则不会:addNode(Node* list, int value)
.
我知道什么pass by value
and 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;
}
这取决于。如果您更改函数内的指针,那么您应该通过引用传递指针。另一方面,如果您不更改函数内的指针,则没有理由添加另一级间接并按引用传递。
不,指针不会自动通过引用传递,它们像任何其他参数一样通过值传递。如果不通过引用传递,则指针将被复制,并且您只能对副本进行操作,而不能对原始指针进行操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)