Skip to main content

6-3 傳值呼叫 與 傳參考呼叫

傳值呼叫(call by value)

在叫用函數時,我們通常都會傳入數個參數給該函數,例如底下這個求等差數列第 n 項的函數 An()。

int An(int a, int d, int n)
{
  return a+(n-1)*d;
}


int main()
{
  cout << An(1, 2, 10) << endl;  // 19
  cout << An(2, 3, 5) << endl;   // 14
  
  return 0;
}

你可以這樣想像,在第一次 9 行叫用 An(1, 1,2, 10) 的時候

  1. An 產生了 a, d, n 這三個變數,用來承接傳入的參數
  2. a 接收到了 1, d 接收到了2, n 接收到了 10
  3. 回傳 a+(n-1)*d 的運算結果
  4. An 之前產生的 a, d, n 三個變數消滅
  5. 返回叫用函數的地方(第9行),繼續執行下去。

當第 10 行叫用 An(2, 3, 5) 的時候,以上流程會再發生一次。請注意 2 個重點:

  1. a, d, n 都是區域變數,當 An() 被叫用時會產生一份區域變數,返回時這些區域變數就會消滅。
  2. 叫用 An() 時,參數的「值」被複製一份給 a, d, n。所以我們叫它 傳「值」呼叫(call by value)