2015-05-17 20 views
0

此代碼片段適用於在開始時創建新節點。使用C++參考參數在鏈接列表中分配新節點

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

聲明node &(*head_ref)使得head_ref一個指針到參考,而不是一個指針,這將是node*& head_ref的參考。

0

空指針不能作爲參考! 所以在C++中有一個唯一的方法來使用雙指針。

使用對空指針的引用可能會導致未定義的行爲,這意味着您應該避免這種情況。

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

但是,爲什麼你不只是使用std :: list?