傳值&傳引用
1.傳值
- 是把實參的值賦值給行參
- 那么對行參的修改,不會影響實參的值
2.傳地址
- 是傳值的一種特殊方式,只是他傳遞的是地址
- 那么傳地址以后,實參和行參都指向同一個對象
3.傳引用
- 真正的以地址的方式傳遞參數 ,傳遞以后,行參和實參都是同一個對象,只是他們名字不同而已
- 對行參的修改將影響實參的值
函數調用的角度來分析
1.傳值
- 函數參數壓棧的是參數的副本。
- 任何的修改是在副本上作用,沒有作用在原來的變量上。
2.傳指針:
- 壓棧的是指針變量的副本。
- 當你對指針解指針操作時,其值是指向原來的那個變量,所以對原來變量操作。
3.傳引用:
- 壓棧的是引用的副本。
- 由於引用是指向某個變量的,對引用的操作其實就是對他指向的變量的操作。(作用和傳指針一樣)
函數參數傳遞機制的基本理論
函數參數傳遞機制問題在本質上是調用函數(過程)和被調用函數(過程)在調用發生時進行通信的方法問題。基本的參數傳遞機制有兩種:值傳遞和引用傳遞。以下討論稱調用其他函數的函數為主調函數,被調用的函數為被調函數。
-
值傳遞(pass-by-value)
被調函數的形式參數作為被調函數的局部變量處理,即在堆棧中開辟了內存空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變量進行,不會影響主調函數的實參變量的值。
-
引用傳遞(pass-by-reference)
被調函數的形式參數雖然也作為局部變量在堆棧中開辟了內存空間,但是這時存放的是由主調函數放進來的實參變量的地址。被調函數對形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調函數中的實參變量。正因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變量。