練習的過程中要求寫一個陣列比較的函數
#include "iostream"
using namespace std;
int isEqual(int a[], int b[]) {
int length_a = sizeof(a) / sizeof(a[0]);
int length_b = sizeof(b) / sizeof(b[0]);
if (length_a != length_b) {
return 200;
}
else {
for (int i = 0; i < length_a; i++) {
if (a[i] != b[i]) {
return 200;
}
}
return 30;
}
}
int main() {
int arr1[4] = { 1,2,3,5 };
int arr2[3] = { 1,2,3 };
int flag = isEqual(arr1, arr2);
cout << flag << endl;
return 0;
}
無論如何都會改變兩個陣列的值,函數的輸出結果不變,請問各位原因在哪? ……謝謝了~
在函數傳參中數組都是以傳指標的形式傳入函數的,並不會出現傳值呼叫。在函數形參中,int arr[4] 會退化成 int *,那個4就遺失了,所以isEqual函數中a其實只是單純的陣列a的首位址。
如果要想同時傳入數組的指標和數組的大小就需要把數組長度當作函數的另一個形參:
例如:
因為你兩個陣列長度求的不對