用函數調用所給出的實參(實際參數,actual arguments)向函數定義給出的形參(形式參數,formal arguments)設置初始值的過程,叫做參數傳遞(Argument Passing)。
在C++中調用函數時有三種參數傳遞方式:
(1)傳值調用;
(2)傳址調用(傳指針);
(3)引用傳遞;
總體上參數傳遞可分為兩類,由形參的類別決定:值調用(call by value)和引用調用(call by reference)。
這里傳址調用被歸為值調用,因為指針傳遞也是值傳遞,只不過值傳遞的是地址。
一、值傳遞
int main( ) { void swap(int,int); //函數聲明 int i=3,j=5; swap(i,j); //調用函數swap return 0; } void swap(int a,int b) //企圖通過形參a和b的值互換,實現實參i和j的值互換 { int temp; temp=a; //以下3行用來實現a和b的值互換 a=b; b=temp; }
在main()函數中調用swap(int a,int b)其中i和j值實際上並沒有交換,如果想要交換只能使用指針傳遞或引用傳遞。
void swap(int* pa,int* pb)
void swap(int& ra,int& rb)
用指針類型作為形參的值調用方式,可以通過參數返回修改后的值。
void main( ) { void swap(int *,int *); int i=3,j=5; swap(&i,&j); //實參是變量的地址 } void swap(int *p1,int *p2) //形參是指針變量 { int temp; temp=*p1; //以下3行用來實現i和j的值互換 *p1=*p2; *p2=temp; }
二、引用傳遞
按引用傳遞,引用實參的引用參數傳遞給函數,而不是進行參數拷貝。引用類型的形參與相應的實參占用相同的內存空間,改變引用類型形參的值,相應實參的值也會隨着變化。
int main( ) { void swap(int &,int &); int i=3,j=5; swap(i,j); return 0; } void swap(int &a,int &b) //形參是引用類型 { int temp; temp=a; a=b; b=temp; }