Chapter 4.3 參數傳遞 - TKU-ME-Lab/C-C-_tutorial GitHub Wiki

參數的傳遞

1.宣告函式所定義的參數,稱之為形式參數
2.呼叫函式傳入的參數稱之為實際參數

int sum(int value1,int value2)   //(int value1,int value2)為形式參數
{
     ......
}

void main()   //主程式開始
{
     cout << "Sum is " << sum(1,100) << ".\n";
}   //(1,100)為實際參數

3.參數傳遞有3種方法:

傳值呼叫(call by value)

呼叫函式時,將值傳入

int sum(int value1,int value2)
{    ...... }

void main()   //主程式開始
{
     cout << "Sum is " << sum(a,b) << ".\n";
                             //傳值呼叫
}

傳址呼叫(call by address)

呼叫函式時,將實際參數的位址傳入

int arith(int *value1,int *value2)   //宣告函式,將形式參數宣告為指標型態
{    ...... }   //函式結束

void main()   //主程式開始
{
     ......
     cout << "\nSum is " << arith(&a,&b) << ".\n";
                                 //傳址呼叫,傳入變數的位址值
     ......
}   //主程式結束

傳參考呼叫(call by reference)

呼叫函式時,格式是傳入實際參數的值,而真正動作是將實際參數的位址傳入

int arith(int &value1,int &value2)   //宣告函式,將形式參數宣告為參考型態
{    ...... }   //函式結束

void main()   //主程式開始
{
     ......
     cout << "\nSum is " << arith(a,b) << ".\n";
                                 //傳參考呼叫,呼叫函式時,傳遞參數的方法與傳址呼叫相同
     ......
}   //主程式結束

比較call by value與call by reference

call by value

函式的參數(a,b)與傳入的值(x1,x2)分別在不同的位址上
所以不論(a,b)如何被變更,均不會影響(x1,x2)的值

call by reference

函式的參數(a,b)與傳入的值(x1,x2)是在同一位址上
所以(a,b)被變更時,(x1,x2)的值均會變動