Skip to main content

6-4 將陣列傳入函數

傳址呼叫(call by address)

除了「傳值呼叫」、「傳參考呼叫」外,還有一種參數傳遞方式叫「傳址呼叫」。

為什麼叫「傳址」呢?因為這種方式是直接把變數在記憶體中的 「位址(address)」 傳進去給函數,在函數裡我們直接到記憶體中的相應位置去操作這個變數的值。所以傳址呼叫和傳參考呼叫一樣可以動到外面變數的值。

關於傳址呼叫,因為會接涉到記憶體位置和指標(pointer),比較複雜,我們會稍後再來看這個主題。

不過由於大家可能會有需要把一個陣列傳入函數裡,所以我們先來看要如何做到。

一個陣列裡面的元素可能會有非常多個,把它的值全部複製一份再傳給函數未免太浪費時間。由於陣列裡的每個元素都是相同型別,所佔記憶體大小相同,又在記憶體中連續緊密排列,所以 C/C++ 裡採取的是把陣列開頭的位址傳進去即可。

但是只有開頭,不知道陣列結束在哪裡,所以我們還得把陣列的長度也一併做為引數傳入。

範例:將陣列傳入函數
int showArray(int A[], int n)
{
  for(int i=0; i<n; i++)
  {
    cout << A[i] << " ";
  }
  cout << endl;
}

int main()
{
  int data[5] = {1, 3, 5, 7, 9};
  
  showArray(data, n);  // 1 3 5 7 9
  
  return 0;
}

1 3 5 7 9