引用作為函數參數
C++之所以增加引用類型, 主要是把它作為函數參數,以擴
充函數傳遞數據的功能。
————————————————————
c++,函數傳參:
(1)將變量名作為實參和形參。這時傳給形參的是變量的值,
傳遞是單向的。如果在執行函數期間形參的值發生變
化,並不傳回給實參。因為在調用函數時,形參和實參
不是同一個存儲單元。//同c
(2) 傳遞變量的指針。形參是指針變量,實參是一個變量的
地址,調用函數時,形參(指針變量)指向實參變量單元。
這種通過形參指針可以改變實參的值。//同c
(3) C++提供了 傳遞變量的引用。形參是引用變量,和實參是
一個變量,調用函數時,形參(引用變量)指向實參變量
單元。這種通過形參引用可以改變實參的值。
#include <iostream> using namespace std; void funcr(int &num , int x) { cout<<"in funcr,addr is:"<<&num<<endl;//對比地址,等於原地址 num = x ;//會改變傳入參數的值。 } void func(int num , int x)//不能寫成void funcr(int num , int x),不正確的重載,導致不知道該調用誰。 { cout<<"in func,addr is:"<<&num<<endl;//對比地址,有所變化 num = x ;//只會在函數內改變拷貝變量的值,不會改變傳入的參數值 } int main() { int x = 100; int &rx = x ; cout<<"addr_x:"<<&x<<endl; cout<<"addr_rx:"<<&rx<<endl;//變量地址和它的引用地址相同 funcr(x,177);//改變傳入參數的值,不管代碼中傳的是變量本身還是引用 cout<<"after funcr , x="<<x<<endl; funcr(rx,211); //改變傳入參數的值 cout<<"after funcr , rx="<<x<<endl; func (rx,233); //不會改變傳入參數的值,不管代碼中傳的是變量本身還是引用 cout<<"after func , rx="<<x<<endl; while(1); return 0 ; } //測試結果: addr_x:0xbf82293c addr_rx:0xbf82293c in funcr,addr is:0xbf82293c after funcr , x=177 in funcr,addr is:0xbf82293c after funcr , rx=211 in func,addr is:0xbf822920 after func , rx=211