C++中引數傳遞方式
C++ 中的引數傳遞方式有2中,pass by value 和 pass by reference,傳遞數值和傳遞引用,兩者最主要的區別在於
pass by value: 將數值copy一份給形參,形引數值的改變不影響形參;
pass by reference : 形式引數能訪問引數,形式引數和被穿引數為同一記憶體地址,形參的改變會引起被傳遞引數的改變;
如果不希望改變被傳遞引數的數值,建議在函式定義的時候函式頭中採用 constant 關鍵字,表示被傳遞引數數值不會改變。
pass by value
int max( int x, int y)
{
if(x<=y)
{
x = y;
}
return x;
}
int main(void )
{
int x = 7,y =9;
cout<<"before" << endl;
cout<< "x value: " << x << " y value: " << y << endl;
cout<< "max : "<< max(x,y) << endl;
cout<<"after"<< endl;
cout<< "x value: " << x << " y value: " << y << endl;
return 0;
}
pass by reference
一種採用引用的方式呼叫;另一種採用指標呼叫。
引用
int max( int& x, int& y)
{
if(x<=y)
{
x = y;
}
return x;
}
int main(void )
{
int x = 7,y =9;
cout<<"before" << endl;
cout<< "x value: " << x << " y value: " << y << endl;
cout<< "max : "<< max(x,y) << endl;
cout<<"after"<< endl;
cout<< "x value: " << x << " y value: " << y << endl;
return 0;
}
指標
int max( int* x, int* y)
{
if(x<=y)
{
*x = *y;
}
return *x;
}
int main(void )
{
int x = 7,y =9;
cout<<"before" << endl;
cout<< "x value: " << x << " y value: " << y << endl;
cout<< "max : "<< max(&x,&y) << endl;
cout<<"after"<< endl;
cout<< "x value: " << x << " y value: " << y << endl;
return 0;
}
小結
- 若在呼叫函式不希望改變被穿引數,採用pass by value 並在 函式定義時新增 constant 修飾符;
- pass by reference 有兩種引數傳遞方法,一種通過 引用,另一種是指標;
- 若被傳遞引數資料量比較大,建議採用pass by reference.