考虑一个实现的struct Node
:
template <class T>
struct Node {
Node<T> * next;
T data;
// Other functions for adding nodes etc...
};
然后给出一个函数remove(...)
,它采用参数 1(对指向节点p
的指针的引用和 2( 要删除的数据d
:
template <class T>
void remove(Node<T> *& p, T d) {
if (p != nullptr) {
if (p->data == d) {
Node<T> * temp = p;
p = p->next;
delete temp;
remove(p, d);
}
else {
remove(p->next, d);
};
};
};
问题
我不太明白这将如何工作。既然temp
指向p
,那么分配的p=p->next
不会在delete temp
中被删除,使这个函数失败吗?我错过了什么吗?也许与指针p
作为引用传递有关?
谢谢。
由于临时指向
p
,分配的p=p->next
不会被删除 无论如何,在删除临时,使此功能失败?
temp
不是指向p
,而是指向p
要点。请注意,指针是将收件人作为值的变量,当 rhs 上的指针返回其值时。
赋值p = p -> next
使p
的值成为节点在p
之后的地址(即p -> next
返回的地址