C/C++:函數參數傳遞方式(轉)

傳遞變量名,傳遞指針,傳遞引用。
author: ZJ 07-12-5
下面介紹3種函數參數傳遞方式。

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後,形參ab的改變不會影響實參ij的值。

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

調用函數時把變量ij的地址傳送給形參p1p2,因此*p1i爲同一內存單元,*p2j是同一內存單元。

這種方式還是“值傳遞”,只不過實參的值是變量的地址而已。而在函數中改變的不是實參的值(即地址,這種改變也影響不到實參),而是實參地址所指向的變量的值。

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的名字傳給引用變量aj的名字傳給引用變量b。此時ab就分別與i,j佔用同一內存空間。這種把實參地址傳遞到形參,使形參的地址取實參的地址,從而使形參與實參共享同一單元的方式,就是地址傳遞方式

這裏要說明的是,

[1]方式2傳遞指針變量要另外開闢內存單元,其內容爲地址;而方式3引用不是一個獨立的變量,不單獨佔內存單元。

[2]方式3中,main函數調用swap函數時,實參不必用函數的地址(&i,&j),而直接使用變量名。系統向形參傳遞的是實參的地址而不是實參的值。

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