在呼叫函式時候,引用形參和普通型參是有著很大的區別。
首先看函式在使用普通型參時候,編譯器是怎麼工作的。在函式呼叫的時候,編譯器為被調函式在棧空間申請一塊記憶體,此時普通形參也在這塊記憶體取,被實參初始化。說到這裡就明白了,在被調函式執行完畢後,編譯器會將其彈出棧空間。因此,形參也就消失了,此時主函式的實參沒有改變。
引用,在c++中,是乙個變數的別名。因此可以通過引用去改變被因引用變數的值。其實,在底層引用的實現就是通過儲存被引用變數的位址實現的,但是在語言層面它又不同於指標(不像指標的含義一樣,如此接近機器)。因此在呼叫函式使用引用傳值時候,實際傳入的就是變數的位址。因此,可以通過引用取改變實參。引用其實可以這樣理解,它即實現了對變數的位址的訪問(類似於指標),然而看起來它卻和變數本身沒有差別。
在編寫先序建立二叉樹的時候,若使用普通的變數,則會出錯。因為在遞迴呼叫
createbitree(t->lchild);
的時候,若傳入普通變數,則不會改變t->lchild的值,因此也就不會產生樹的其他節點。因此,引用的作用顯而易見。
void createbitree(bitree &t)
}
非引用形參VS指標形參VS引用形參
一 非引用形參 voidadd1 intv1 這是最普通的形參方式,當函式被呼叫時,呼叫拷貝建構函式,生產乙個新的例項,函式所有的修改,都是對新的例項的修改 函式退出之前,會呼叫析構函式,資源。二 指標形參 voidadd2 int p 使用指標做為函式的形參,同樣指標的值 指標的位址 不會因為 p...
函式形參 指標,引用,const,陣列形參
指標也是物件,也會拷貝,所以分實參指標和形參指標。在傳進函式時,實參進行拷貝,所以在函式裡改變指標值不影響實參。void reset int ip 引用不是物件,通過引用可以改變實參 void reset int i 使用引用的好處是避免了拷貝。其實也只是兩個變數名的傳遞,和變數規則一致,如果在函式...
引用形參 指標形參的使用
引用形參 指標形參可以改變主函式內的實參值 includeusing std cin using std cout using std endl 形參其實是在把實參傳遞給子函式的時候定義了乙個新的變數,但是這個變數的值和實參相等,所以在子函式裡無論怎麼修改都不會影響到呼叫它的函式的實參的值 int ...