最近被python的變數引用搞的很頭疼
所以用c++做了實驗
只傳遞結構:
#include
class
point
;void
print
(point x)
intmain
(int argc,
const
char
* ar**)
輸出:0x000
0x7ffe00000001
132766
只返回結構
#include
class
point
;point print()
intmain
(int argc,
const
char
* ar**)
輸出:0x7ffe00000001
132766
0x7ffe00000001
132766
傳遞並返回結構
#include
class
point
;point print
(point x)
intmain
(int argc,
const
char
* ar**)
輸出:0x000
0xf2d78a4b000000011-
220755381
0xf2d78a4b000000011-
220755381
結論:c++編譯器在傳遞結構結構/物件時做了如下幾件事
一.如果結構是傳入的,那麼編譯器會把結構拷貝乙份傳遞給函式
二.函式返回時結構有兩種情況:
1.如果結構時在函式中新建的,那麼編譯器會直接傳遞這個結構(不會刪掉原結構並拷貝乙份),這和python是類似的
2.如果結構時傳入的,那麼編譯器會傳入乙份拷貝,並再返回時拷貝乙份傳入的拷貝返回(可能出於便於**堆疊變數的考慮)
C C 函式中引數和返回值傳遞簡記
原文 c c 函式引數和返回值傳遞機制 簡單記錄一下 c 函式呼叫中,引數和返回值傳遞的方法和步驟 函式引數的傳遞是初始化語義 用呼叫者的實參去初始化函式的形參,如果引數是物件,需要呼叫該類的拷貝建構函式,如果沒有顯式定義的拷貝建構函式,則執行預設的按成員拷貝 函式返回值的傳遞內容稍多,示例 tes...
別名的定義 傳遞 返回物件
的功能 1 取位址符 2 引用符 一 定義別名 定義變數的別名 如,int n int m n m是n 的別名 可以用int型別的m來表示int型別的n。且m與n的位址也一樣。故m 和 n 是同乙個東西!定義物件的別名 如 human mike human rmike mike rmike是mike...
C 通過引用來傳遞和返回類物件
類是c 語言物件導向程式設計的載體,我們也可以將類視為一種特殊的資料型別。在c 語言中,由類宣告的物件,和其它型別宣告的變數一樣,同樣可以通過傳值 引用和指標的方式作為函式的引數或函式返回值。通常來講,除非是迫不得已,否則最好不要採用傳值的方式傳遞和返回物件,這是因為採用傳值的方式傳遞和返回物件的過...