c++中指針的引用 *&作爲參數傳遞

我們都知道c++中的參數傳遞是值傳遞,想要通過函數修改形參,一般使用指針或者引用。

那麼有時候我們對於傳入的指針地址希望做修改怎麼辦呢?


今天在寫一個樹結構的題時碰到這個問題


大概代碼是

void insert_array(TreeNode *&node, int *array, int left, int right)
{
    
    if(left > right)
      return;
    int min_val = array[left];
    int min_index = left;
    for(int i = left+1; i < right; i++)
    {
	if(array[i] < min_val){
	    min_val = array[i];
	    min_index = i;
	}
    }
    
    node = new TreeNode(); //這裏如果node是指針就出錯了
    node->val = min_val;

    insert_array(node->left, array, left, min_index-1);
    insert_array(node->right, array, min_index + 1, right);
}
主要是倒數三四行代碼,之前傳入的參數爲TreeNode *node結果一直錯,後來加上引用就對了。

原因其實也簡單,就是我們把指針當作形參傳入時,傳的是地址,事實上這個地址的值也是形參。

 node = new TreeNode();

應該相當於

TreeNode *newNode = new TreeNode();
node = newNode;


new一個值會產生一個新的地址,那麼就需要修改node的地址,但是我們傳入的node的地址是一個形參,值傳遞,你在函數內修改它的地址對於傳入的地址沒有影響,這樣當然就爆炸了。。。。所以如果需要讓這個指針的地址是可變的,應該傳入的參數是*&的形式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章