值傳遞 引用傳遞與位址傳遞對比

2021-07-25 20:55:01 字數 1193 閱讀 4514

引用傳遞:形參與實參公用乙個記憶體單元,同時變化。

值傳遞:形參是實參的轉殖體,形參在記憶體單元中發生變化不會影響到實參。

形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的。

記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。

實參可以是常量、變數、表示式、函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使引數獲得確定值。

通過位址傳遞,實參的值不發生變化,呼叫函式後,形參的值發生變化。

#include

void exchg1(int

x, int

y) //定義中的x,y變數被稱為exchg1函式的形式引數

int main()

值傳遞是對實參開闢的記憶體空間形成的副本操作,不影響實參值的改變。

- 位址傳遞

#include

void exchg2(int

*px, int

*py)

int main()

位址傳遞中主調函式傳入的是實參的位址,被調函式通過指標實現定址操作,同時操作改變實參形參的值。

- 引用傳遞

#include

void exchg3(int &x, int &y) //注意定義處的形式引數的格式與值傳遞不同

int main()

引用傳遞中被調函式的形參是主調函式的實參的引用,屬於同乙個東西,不分彼此,改變形參就是改變實參。

- 對比與總結

1. 在函式定義格式上有不同:

值傳遞在定義處是:exchg1(int x, int y);

引用傳遞在這義處是:exchg1(int &x, int &y);

2. 呼叫時有相同的格式:

值傳遞:exchg1(a,b);

引用傳遞:exchg3(a,b);

3. 功能上是不同的:

值傳遞的函式裡操作的不是a,b變數本身,只是將a,b值賦給了x,y函式裡操作的只是x,y變數而不是a,b,顯示a,b的值不會被exchg1函式所修改。

引用傳遞exchg3(a,b)函式裡是用a,b分別代替了x,y。函式裡操作的是a,b。

值傳遞 位址傳遞 引用傳遞

值傳遞使得實參與形參沒有聯絡,函式與函式之間沒有耦合性,在各自的函式裡修改值不會改變各自本身的值。但這也是它的缺陷。1.實參傳入被調函式無法交換數值。2.當傳入值大於8位元組即需要進行整體拷貝,無論是開闢的空間還是資料的拷貝都相對較大 這也是設計陣列退化為指標的原因 而指標傳遞只有4個位元組 所以需...

c 值傳遞 位址傳遞 引用傳遞

一.函式引數傳遞方式之一 值傳遞 1 值傳遞的乙個錯誤認識 先看題一中exchg1函式的定義 void exchg1 int x,int y 定義中的x,y變數被稱為exchg1函式的形式引數 問 你認為這個函式是在做什麼呀?答 好像是對引數x,y的值對調吧?請往下看,我想利用這個函式來完成對a,b...

C 值傳遞 位址傳遞 引用傳遞

昨天遇到乙個問題 程式一 char str 256 char sp str visitdepart rs,rs.column,sp static void visitdepart result t rs,int num,char spx note 這個程式表面上看是沒有錯誤的,但是,我用它做了樹的深...