C++中值傳遞和引用傳遞的區別

 C++中參數的傳遞方式:

1.值傳遞

    調用時,將實參的值傳遞對應的形參,即爲值傳遞。由於形參有自己獨立的存儲空間,又作爲函數的局部變量使用,因此在函數中對任何形參值得修改都不會改變實參變量的值。簡單的看一個例子:

編譯後,輸出結果如下所示:

從上圖可以看出,主函數聲明瞭兩個全局變量a,b並對其賦值1,2;通過函數Swp()函數調用之後,在函數內部將a和b的值交換了,使得函數內,a=2,b=1;但是,這個過程並沒有改變全局變量a和b的值。

我們分析一下函數的調用過程:函數Swap()被調用前,實參a和b有自己的存儲空間,並且有自己的初始值。當調用函數Swap()時,爲形參(即函數的參數)x和y分配存儲空間,並將a和b的值複製過來,函數執行過程中,將x和y的值進行交換,當函數執行結束之後,x和y所佔用的存儲空間將被釋放,這種傳遞的方式,並不會對實參a和b的值產生影響,此即爲值傳遞。

2.引用傳遞

    引用傳遞是一種特殊的變量,它被認爲是一個變量的別名。當定義一個引用時,其實是爲目標變量起一個別名,引用並不分配獨立的內存空間,它與目標變量公用其內存空間,當定義一個引用時,如果該引用不是用作函數的參數或者返回值,則必須提供該引用的初始值(即必須提供引用的目標變量名)如圖:

b變量引用了a變量,可知a和b的值相等,均公用同一塊內存地址,即變量b是a變量的一個別名。

將上面的值傳遞的示例代碼修改爲引用傳遞如下圖所示:

編譯運行,輸出結果如下所示:

當函數未調用之前,實參a和b的值分別爲1和2。當函數調用過程中,形參的值被交換,即a=2,b=1;函數調用結束之後,實參的值被改變。即函數調用時,作爲形參的引用變量並不分配新的內存空間,它將作爲實參變量的別名與其共用內存。

    說明:使用引用參數可以直接操作實參變量,從而能夠實現通過修改形參的值而達到修改對應實參值得目的。當引用作爲函數形參,其引用的目標變量沒人爲調用該函數時對應的實參變量名,所以,在定義函數時,對於引用類型參數不必提供引用的初始值
————————————————
版權聲明:本文爲CSDN博主「Sun.ME」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/JianZuoGuang/article/details/78727790

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章