C++參數傳遞方式

下面介紹3種函數參數傳遞方式。

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章