Rumah  >  Soal Jawab  >  teks badan

c++ - Mengapakah nilai pulangan bagi fungsi perbandingan tatasusunan ini kekal tidak berubah?

Semasa latihan, anda dikehendaki menulis fungsi perbandingan tatasusunan

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

Tidak kira bagaimana nilai dua tatasusunan diubah, hasil keluaran fungsi ini tetap tidak berubah Apakah sebabnya? ...Terima kasih~

巴扎黑巴扎黑2736 hari yang lalu718

membalas semua(2)saya akan balas

  • 为情所困

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

    Dalam hantaran parameter fungsi, tatasusunan dihantar ke dalam fungsi dalam bentuk penunjuk, dan tidak akan ada panggilan mengikut nilai. Dalam parameter fungsi, int arr[4] akan merosot menjadi int *, dan 4 akan hilang, jadi a dalam fungsi isEqual sebenarnya hanyalah alamat pertama tatasusunan a.
    Jika anda ingin menghantar penunjuk tatasusunan dan saiz tatasusunan pada masa yang sama, anda perlu menggunakan panjang tatasusunan sebagai parameter formal fungsi yang lain:
    Contohnya:

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

    balas
    0
  • 高洛峰

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

    Sebab anda tersalah mengira panjang dua tatasusunan

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

    balas
    0
  • Batalbalas