此代码片段适用于在开始时创建新节点。
void push(node **head_ref,int n_data){
node *new_node= new(node);
new_node->data=n_data;
new_node->next=(*head_ref);
*head_ref=new_node;
}
int main(){
node *head=NULL;
push(&head,data);
return 0;
}
这是无效的,但为什么?我想做的是创建一个引用参数,正如Herbert Schildt所提到的。
void push(node &(*head_ref),int n_data){
node *new_node= new(node);
new_node->data=n_data;
new_node->next=head_ref;
head_ref=new_node;
}
int main(){
node *head=NULL;
push(head,data);
return 0;
}
声明node &(*head_ref)
使head_ref
成为指向引用的指针,而不是指向指针的引用,指针是node*& head_ref
。
空指针不能是引用!因此,在c++中,唯一的方法就是使用双指针。
使用对空指针的引用可能导致未定义的行为,这意味着您应该避免这种情况。
也许boost::optional是你需要的,但是你需要做一些修改。
但是为什么不直接使用std::列表呢?