標籤:
引用也可以作為一個函數的參數,如:我們定義交換兩個數的函數swap,將函數的參數定義成引用的形式:
1 void swap(int &p1, int &p2) //此處函數的形參都是引用2 {3 int p;4 p=p1;5 p1=p2;6 p2=p;7 }
為了在程式中調用該函數,在相應的主調函數的調用點處直接以變數作為實參進行調用即可,而不需要對實參變數有任何的特殊要求。如上面定義的swap函數的主調函數可寫為:
int main(){ int a,b; cin >> a >> b; //輸入a,b兩變數的值 swap(a,b); //直接以變數a和b作為實參調用swap函數即可 cout << a << ‘ ‘ << b; return 0;}
當發生函數調用時,主調函數的調用點處的實參變數a和b分別傳遞給被調用函數的形參p1和p2,由於形參p1和p2定義成引用的形式,所以這時p1就是實參a的引用,p2就是實參b的引用。所以,在被調函數swap中,任何對形參p1和p2的操作實質就是對實參a和b的操作。
由此,有幾點需要注意:
- 傳遞引用給函數與傳遞指標的效果是一樣的,這時被調函數的形參就作為原來主調函數中的實參變數或對象的一個別名來使用,所以在被調函數中對形參變數的操作就是對其相應的目標對象(在主調函數中)的操作;
- 使用引用傳遞函數的參數在記憶體中並沒有產生實參的副本(因為引用只是目標變數的別名而不是一個新的變數),且它是直接對實參操作;而使用一般變數傳遞函數的參數,當發生函數調用時需要給形參分配儲存單元,這樣形參與實參就佔用不同的儲存單元,所以形參變數的值時實參變數的副本。因此,當參數傳遞的資料量較大時,用引用比較好。
- 使用指標作為函數的參數雖然也能達到與使用引用一樣的效果,但是,在被調函數中需要重複使用“*指標變數名"的形式進行運算,容易產生錯誤且程式的閱讀性較差。
本人自學,教材可能有點老,有問題的話求大家指正!!!謝謝!!!
C++引用作為函數的參數