2015-05-10 38 views
-2

檢查兩個函數並告訴我它們之間的區別。謝謝你告訴我,兩個指針告訴我兩者之間的區別。它是樹中插入的C++代碼

void binaryTree::insert1(binaryNode *root,string value) 
{ 
    if(root==NULL) 
     root = CreateNode(value); 
    else if(value > root->data) 
     insert1 (root->right,value); 
    else if(value < root->data) 
     insert1 (root->left,value); 
} 

void binaryTree::insert2(string value) 
{ 
    insert2(root,value); 
} 

void binaryTree::insert2(binaryNode *&root,string value) 
{  
    if(root==NULL) 
     root = CreateNode(value); 
    else if(value > root->data) 
     insert2 (root->right,value); 
    else if(value < root->data) 
     insert2 (root->left,value); 
} 
+0

在未來的問題中,如果您告訴我們您想要什麼,您的問題是什麼,您對這些問題的看法以及您如何嘗試解決這些問題,將會有所幫助。 –

回答

3

不同的是,在第一個版本,你的價值傳遞指針,這意味着它被複制和功能的差異你只能修改副本。

在第二個版本中,您通過引用傳遞指針,這意味着對它的更改將反映在該函數的外部。

+0

但是第一個不起作用。當我使用insert1時,沒有任何東西被插入。但是當我使用insert2時,它可以工作。爲什麼? –

+0

@MADCODER:關於「爲什麼?」,這就是這個答案的答案。研究答案。想想看。 –

+1

@MADCODER當你在函數的第一個版本中分配給'root'時,你只分配給一個*拷貝*,當然,改變拷貝不會改變原來的。在函數的第二個版本中,'root'是原文的一個*引用*,在該版本中賦值給'root'分配給原始引用。引用是C++中一個基本而重要的關鍵概念,您需要通過指針,類和'for'循環以及C++中所有其他基本但關鍵的概念來學習和理解。 –

相關問題