struct leaf
{
int data;
leaf *l;
leaf *r;
};
struct leaf *p;
void tree::findparent(int n,int &found,leaf *&parent)
这是BST的一段代码。我想问一下。为什么
leaf *&parent
为什么我们需要“参考标记”?
父母也是一片叶子,为什么我不能只使用leaf* parent
?
以下代码供您参考。谢谢!
void tree::findparent(int n,int &found,leaf *&parent)
{
leaf *q;
found=NO;
parent=NULL;
if(p==NULL)
return;
q=p;
while(q!=NULL)
{
if(q->data==n)
{
found=YES;
return;
}
if(q->data>n)
{
parent=q;
q=q->l;
}
else
{
parent=q;
q=q->r;
}
}
}
答案 0 :(得分:7)
您正在通过引用在中传递指针parent
,以便您可以修改该指针:
parent=q;
如果您通过值传递中的指针,则修改将是指向函数末尾过期的指针的副本。
答案 1 :(得分:0)
使用REFERENCE TO POINTER时,可以更改指针的值。您可能需要在链接列表实现中使用此模式来更改列表的头部。
void passPointer(int *variable)
{
*variable = (*variable)*2;
variable = NULL; // THIS CHANGES THE LOCAL COPY NOT THE ACTUAL POINTER
}
void passPointerReference(int* &variable)
{
*variable = (*variable)*3;
variable = NULL; // THIS CHANGES THE ACTUAL POINTER!!!!
}
int main()
{
int *pointer;
pointer = new int;
*pointer = 5;
passPointer(pointer);
cout << *pointer; // PRINTS 10
passPointerReference(pointer);
cout << *pointer; // GIVES ERROR BECAUSE VALUE OF pointer IS NOW 0.
// The constant NULL is actually the number 0.
}