1.將變量名作爲形參和實參
在這種情況下傳給形參的是變量的值。傳遞是單向的,即如果在執行函數期間形參的值發生變化,並不傳回給實參,這就是值傳遞方式。因爲在調用函數期間,形參和實參不是同一個存儲單元。
int main(){
voidswap(int,int);//參數爲整型變量
inti=3,j=4;
cout<<"i="<<i<<",j="<<j<<endl;
swap(i,j);//變量名
cout<<"i="<<i<<",j="<<j<<endl;
system("PAUSE");
return 0;
}
void swap(int a,int b){//形參爲整型變量
inttemp;
temp=a;
a=b;
b=temp;
}
結果:
i=3,j=4
i=3,j=4
可以發現,執行函數swap後,形參a和b的改變不會影響實參i和j的值。
2.傳遞變量指針
形參是指針變量,實參是一個變量的地址,調用函數時,形參(指針變量)指向實參變量單元。
int main(){
voidswap(int*,int*);//參數爲整型指針變量
inti=3,j=4;
cout<<"i="<<i<<",j="<<j<<endl;
swap(&i,&j);//變量地址
cout<<"i="<<i<<",j="<<j<<endl;
system("PAUSE");
return 0;
}
void swap(int *p1,int *p2){//形參爲整型指針變量
inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
結果:
i=3,j=4
i=4,j=3
調用函數時把變量i和j的地址傳送給形參p1和p2,因此*p1和i爲同一內存單元,*p2和j是同一內存單元。
這種方式還是“值傳遞”,只不過實參的值是變量的地址而已。而在函數中改變的不是實參的值(即地址,這種改變也影響不到實參),而是實參地址所指向的變量的值。
3.“引用形參”
int main(){
voidswap(int&,int&);//參數爲整型變量的引用
inti=3,j=4;
cout<<"i="<<i<<",j="<<j<<endl;
swap(i,j);//變量名
cout<<"i="<<i<<",j="<<j<<endl;
system("PAUSE");
return 0;
}
void swap(int &a,int &b){//形參爲引用類型
inttemp;
temp=a;
a=b;
b=temp;
}
結果:
i=3,j=4
i=4,j=3
當main函數調用swap函數時,由實參把變量名傳給形參。i的名字傳給引用變量a,j的名字傳給引用變量b。此時a和b就分別與i,j佔用同一內存空間。這種把實參地址傳遞到形參,使形參的地址取實參的地址,從而使形參與實參共享同一單元的方式,就是地址傳遞方式。
這裏要說明的是,
[1]方式2傳遞指針變量要另外開闢內存單元,其內容爲地址;而方式3引用不是一個獨立的變量,不單獨佔內存單元。
[2]方式3中,main函數調用swap函數時,實參不必用函數的地址(即&i,&j),而直接使用變量名。系統向形參傳遞的是實參的地址而不是實參的值。
本文出自“子孑”博客,請務必保留此出處http://zhangjunhd.blog.51cto.com/113473/53632