使用C ++引用参数在链接列表中分配新节点

时间:2015-05-17 11:25:09

标签: c++ pointers linked-list

此代码段对于在开头创建新节点有效。

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;
}

2 个答案:

答案 0 :(得分:2)

声明node &(*head_ref)使head_ref成为引用的指针,而不是对指针的引用,node*& head_ref

答案 1 :(得分:0)

Null-Pointer不能作为参考! 所以在C ++中,使用双指针是唯一的方法。

使用对空指针的引用可能会导致未定义的行为,这意味着您应该避免这种情况。

也许boost :: optional是你需要的,但你需要做一些修改。

但你为什么不只是使用std :: list?