數組作為函數參數傳遞
數組作為函數參數傳遞時,傳入的是數組首位址,并非數組本身。今天總算了解了這一點。寫了一個列印數組元素的函數,代碼如下:
void print1(int arr[]) {
int len = sizeof(arr) / sizeof(arr[0]);
cout << sizeof(arr)<<endl;
for (int i = 0;i < len;i++) {
cout << arr[i] << " ";
}
}
main函數:
int arr[5] = { 1,2,3,4,5 };
print1(arr);
運作結果:
顯然,并沒有列印出數組所有元素。根據輸出,sizeof(arr)=4;
sizeof(arr)/sizeof(arr[0])=1。很明顯,如果傳入的是數組本身,sizeof(arr)的值一定遠大于4。傳入的是位址的話,則剛好是4個位元組。
再看我寫的第二個列印函數:
void print2(int arr[], int len) {
for (int i = 0;i < len;i++) {
cout << arr[i] << " ";
}
}
main函數
int arr[5] = { 1,2,3,4,5 };
int len = sizeof(arr) / sizeof(arr[0]);
cout << "數組長度:"<<len<<" 數組所占空間:"<< sizeof(arr)<<endl;
print2(arr, len);
運作結果:
結果準确無誤。
總結:當數組作為函數參數傳遞時,不能在函數中用sizeof求數組長度。