Maison  >  Questions et réponses  >  le corps du texte

c++ - Pourquoi la valeur de retour de cette fonction de comparaison de tableau reste-t-elle inchangée?

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~

巴扎黑巴扎黑2736 Il y a quelques jours717

répondre à tous(2)je répondrai

  • 为情所困

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

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

    répondre
    0
  • 高洛峰

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

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

    répondre
    0
  • Annulerrépondre