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~
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 :
Parce que vous avez mal calculé la longueur des deux tableaux