傳遞變數名,傳遞指標,傳遞引用
1.將變數名作為形參和實參
在這種情況下傳給形參的是變數的值。傳遞是單向的,即如果在執行函數期間形參的值發生變化,並不傳回給實參,這就是值傳遞方式。因為在調用函數期間,形參和實參不是同一個儲存單元。
int main(){void swap(int,int);//參數為整型變數int i=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){//形參為整型變數int temp;temp=a;a=b;b=temp;}
結果:
i=3,j=4
i=3,j=4
可以發現,執行函數swap後,形參a和b的改變不會影響實參i和j的值。
2.傳遞變數指標
形參是指標變數,實參是一個變數的地址,調用函數時,形參(指標變數)指向實參變數單元。
int main(){void swap(int*,int*);//參數為整型指標變數int i=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){//形參為整型指標變數int temp;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(){void swap(int&,int&);//參數為整型變數的引用int i=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){//形參為參考型別int temp;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