C++ 函數 參數傳遞方式


用函數調用所給出的實參(實際參數,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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM