傳指標和傳引用的乙個問題

2021-06-08 05:03:58 字數 688 閱讀 4863

int main()  

class tree

tree::tree(node* root)

void tree::add(node *root,node *node)

void tree::add(int data)

在這裡並不能完成預定的目標,在首次執行完add方法後,this->root的值依然為null,並不是我們想象中的指向node。出現這種情況在於add方法的傳參問題上。我們會想當然認為在add方法中我們傳遞的是乙個指標,指標就是對同一塊記憶體區進行操作,那麼add方法中對形參root的操作自然會反映到this->root中來。如圖

在add方法呼叫中,將this->root複製給形參root,使得this->root和形參root都指向同一塊記憶體空間,它們對node物件的操作會使另一方得到相同的結果,但是形參root和this->root並非同一塊記憶體空間,對形參root賦值,並不會導致this->root也指向相同的空間。

為了達到我們想要的結果,只需將add的方法頭修改如下:void add(node *&root,node* node),這樣形參root作為this->root的引用而存在,作用如圖:

這是在指標作為引數傳遞時,特別需要注意的地方。如果想對變數本身進行改變,需要傳遞變數的引用,指標只能修改指向的記憶體空間的內容。

C 傳指標和傳引用

有區別 無論你傳值還是傳指標,函式都會生成乙個臨時變數,但傳引用時,不會生成臨時變數 當你傳值時,只可以引用值而不可以改變值,但傳值引用時,可以改變值 當你傳指標時,只可以改變指標所指的內容,不可以改變指標本身,但傳指標引用時,既可以改變指標所指的內容,又可以改變指標本身 但傳引用主要是它不生成臨時...

C 傳值 傳引用和傳指標

相關概念 1 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資料傳遞稱為形實結合 2 引數傳遞方式 1 傳引數的值 稱值傳遞,簡稱傳值 2 傳引數的位址 稱位址傳遞,簡稱為傳址 3 引用傳遞 稱為傳引用 例項 includ...

傳值和傳引用 傳指標的區別

傳值,是把實參的值賦值給行參,那麼對行參的修改,不會影響實參的值 傳位址,是傳值的一種特殊方式,只是他傳遞的是位址,不是普通的如 int,那麼傳位址以後,實參和行參都 指向同乙個物件 傳引用,真正的以位址的方式傳遞引數,傳遞以後,行參和實參 都是同乙個物件 只是他們名字不同而已,對行參的修改將影響實...