首頁  >  問答  >  主體

c++ - 為何這段陣列比較的函式回傳值不變?

練習的過程中要求寫一個陣列比較的函數

#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;
}

無論如何都會改變兩個陣列的值,函數的輸出結果不變,請問各位原因在哪? ……謝謝了~

巴扎黑巴扎黑2686 天前661

全部回覆(2)我來回復

  • 为情所困

    为情所困2017-05-16 13:26:28

    在函數傳參中數組都是以傳指標的形式傳入函數的,並不會出現傳值呼叫。在函數形參中,int arr[4] 會退化成 int *,那個4就遺失了,所以isEqual函數中a其實只是單純的陣列a的首位址。
    如果要想同時傳入數組的指標和數組的大小就需要把數組長度當作函數的另一個形參:
    例如:

    #include "iostream"
    
    using namespace std;
    
    int isEqual(int a[],int length_a ,int b[],int length_b) {
        cout<<length_b<<length_a<<endl;
        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,sizeof(arr1)/sizeof(int),arr2,sizeof(arr2)/sizeof(int));
        cout << flag << endl;
    
        return 0;
    }

    回覆
    0
  • 高洛峰

    高洛峰2017-05-16 13:26:28

    因為你兩個陣列長度求的不對

     #include "iostream"
    
    using namespace std;
    
    int isEqual(int a[], int b[], int length_a, int length_b) {
       
        cout << length_a << length_b << endl;
        if (length_a != length_b) {
            return 200;
        }
        else {
            for (int i = 0; i < length_a; i++) {
                cout << a[i] << b[i] << endl;
                if (a[i] != b[i]) {
                    return 200;
                }
            }
            return 30;
        }
    }
    
    int main() {
        int arr1[5] = { 2,1,2,3,5 };
        int arr2[3] = { 1,2,3 };
        int length_a = sizeof(arr1) / sizeof(arr1[0]);
        int length_b = sizeof(arr2) / sizeof(arr2[0]);
        int flag = isEqual(arr1, arr2, length_a, length_b);
        cout << flag << endl;
    
        return 0;
    }

    回覆
    0
  • 取消回覆