2015-12-31 39 views
-3

我測試了下面的C++代碼。看起來根不會改變。但是,不應該從func節點以3節點改變爲5節點嗎?在某些其他函數中樹指針變量是否更改?

void func(BSTreeNode* root){ 
    root=root->right; 
} 

int main(int argc, const char * argv[]) { 
    BSTreeNode* root=new BSTreeNode(3); 
    root->right=new BSTreeNode(5); 
    func(root); 
    cout<<root->val; 
    return 0; 

}

而且,我一直想知道什麼是

TreeNode root=NULL; 

TreeNode root; 

是它的區別的第一個真正具有新的內存分配第二個不是?

+0

參數在C中按值傳遞。在函數中更改變量不會影響調用者的變量。 – Barmar

+0

'func'改變一個局部變量。調用者不可見此更改。它實際上是一個空操作 - 它完全等同於'void func(BSTreeNode * root){ –

+0

至於你的第二個問題 - 很難在不知道'TreeNode'實際是什麼的情況下精確地回答。 –

回答

0
  1. 您的功能func更新本地變量。該分配不會在主要聲明的變量root上重複。

  2. 在第一種情況下,root被初始化爲null。在第二種情況下,root未初始化並指向某個未知內存,可能無效。

相關問題