使用 C++ 引用参数在链表中分配新节点
Allocating new node in Linked List using C++ reference parameters
此代码片段适用于在开始时创建新节点。
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;
}
空指针不能作为引用!
所以在 C++ 中只有一种方法,即使用双指针。
使用对空指针的引用可能会导致未定义的行为,这意味着您应该避免这种情况。
也许 boost::optional 是您所需要的,但您需要做一些修改。
但是你为什么不直接使用 std::list?
声明 node &(*head_ref)
使 head_ref
成为一个指向引用的 指针 ,而不是对指针的引用,后者是 node*& head_ref
。
此代码片段适用于在开始时创建新节点。
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;
}
空指针不能作为引用! 所以在 C++ 中只有一种方法,即使用双指针。
使用对空指针的引用可能会导致未定义的行为,这意味着您应该避免这种情况。
也许 boost::optional 是您所需要的,但您需要做一些修改。
但是你为什么不直接使用 std::list?
声明 node &(*head_ref)
使 head_ref
成为一个指向引用的 指针 ,而不是对指针的引用,后者是 node*& head_ref
。