c++ - Pourquoi la valeur de retour de cette fonction de comparaison de tableau reste-t-elle inchangée?
巴扎黑
巴扎黑 2017-05-16 13:24:28
0
2
735

Pendant l'exercice, vous devez écrire une fonction de comparaison de tableaux

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

Peu importe la façon dont les valeurs des deux tableaux sont modifiées, le résultat de sortie de cette fonction reste inchangé. Quelle en est la raison ? ...Merci~

巴扎黑
巴扎黑

répondre à tous(2)
为情所困

Lors du passage des paramètres de fonction, les tableaux sont transmis à la fonction sous forme de pointeurs et il n'y aura pas d'appel par valeur. Dans le paramètre de fonction, int arr[4] dégénérera en int * et le 4 sera perdu, donc a dans la fonction isEqual n'est en fait que la première adresse du tableau a.
Si vous souhaitez transmettre le pointeur du tableau et la taille du tableau en même temps, vous devez utiliser la longueur du tableau comme autre paramètre formel de la fonction :
Par exemple :

#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;
}
小葫芦

Parce que vous avez mal calculé la longueur des deux tableaux

 #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;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal