1. 程式人生 > 其它 >C++中引數傳遞方式

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;

}

小結

  1. 若在呼叫函式不希望改變被穿引數,採用pass by value 並在 函式定義時新增 constant 修飾符;
  2. pass by reference 有兩種引數傳遞方法,一種通過 引用,另一種是指標;
  3. 若被傳遞引數資料量比較大,建議採用pass by reference.