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