我們都知道c++中的引數傳遞是值傳遞,想要通過函式修改形參,一般使用指標或者引用。
那麼有時候我們對於傳入的指標位址希望做修改怎麼辦呢?
今天在寫乙個樹結構的題時碰到這個問題
大概**是
void insert_array(treenode *&node, int *array, int left, int right)
}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的位址是乙個形參,值傳遞,你在函式內修改它的位址對於傳入的位址沒有影響,這樣當然就**了。。。。所以如果需要讓這個指標的位址是可變的,應該傳入的引數是*&的形式
c 中指標與引用作為函式引數的區別
首先,函式引數的普通傳遞就不說了,這個很簡單,傳過來之後只是乙個變數的複製,不會改變原變數的 其次,引用傳遞也很明確,引用傳參是會改變引數的值的 問題就在指標傳遞,分為以下幾種 1.指標作為函式引數,如果是單純針對指標進行操作,它就相當於普通傳遞,不會改變原指標 但如果對指標進行引用傳遞,欸,它就可...
指標和引用作為函式傳遞引數
引用傳遞 void outputnumber int nnumber 設定引用型別引數 intmain intargc,char argv 指標傳遞 void outputnumber int pnumber 使用指標作為函式引數 intmain intargc,char argv 輸出結果是一樣的...
指標和指標的引用作為引數 c
指標和指標的引用作為引數 c 指標都清楚,存放變數位址的變數。那麼指標指向的資料是可以改變,而指標本身是不可以改變的。表示為 p 指標的引用,相當於指標的指標。作為引數傳遞時,這樣指標的數值是可以改變的,表示為 p fun int pa pa的數值在函式返回後不會變化 fun int pa pa的數...