Pourquoi la comparaison d'égalité de tableau à l'aide de == ne fonctionne-t-elle pas ?
En C , l'opérateur d'égalité (==) compare les adresses mémoire de tableaux, plutôt que leur contenu. Ce comportement peut prêter à confusion, car il diffère de l'attente intuitive de comparer les éléments d'un tableau élément par élément.
Considérez le code suivant :
int main() { int iar1[] = {1, 2, 3, 4, 5}; int iar2[] = {1, 2, 3, 4, 5}; if (iar1 == iar2) cout << "Arrays are equal."; else cout << "Arrays are not equal."; }
Dans ce code, deux tableaux sont créés avec un contenu identique. Cependant, la sortie indique que les tableaux ne sont pas égaux. En effet, l'opérateur == compare les adresses mémoire des tableaux, qui sont différentes pour chaque tableau.
Pour effectuer une comparaison élément par élément des tableaux, on peut soit utiliser une boucle, soit utiliser std::array classe. La classe std::array fournit une interface légèrement différente pour travailler avec des tableaux et prend en charge la comparaison directe d'égalité.
Exemple utilisant une boucle :
bool arraysEqual(int *arr1, int *arr2, int size) { for (int i = 0; i < size; ++i) { if (arr1[i] != arr2[i]) return false; } return true; }
Exemple utilisant std::array:
#include <array> int main() { std::array<int, 5> iar1 = {1, 2, 3, 4, 5}; std::array<int, 5> iar2 = {1, 2, 3, 4, 5}; if (iar1 == iar2) cout << "Arrays are equal."; else cout << "Arrays are not equal."; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!