Maison >développement back-end >C++ >Pourquoi l'opérateur `==` ne fonctionne-t-il pas pour comparer les tableaux C ?
Comprendre la comparaison d'égalité des tableaux en C
Les tableaux sont une structure de données fondamentale en C, mais leur comparaison d'égalité à l'aide de l'opérateur == conduit souvent à des résultats inattendus. Cet article vise à clarifier pourquoi cela se produit et à fournir des alternatives pour effectuer des comparaisons de tableaux par éléments.
Problème :
Considérez l'extrait de 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."; }
Pourquoi la sortie de ce code indique-t-elle que les tableaux ne sont pas égal ?
Réponse :
L'opérateur d'égalité == n'effectue pas de comparaison élément par élément pour les tableaux. Au lieu de cela, il compare les adresses des tableaux, qui sont toujours différentes car elles sont stockées dans des emplacements mémoire distincts.
Pour comprendre pourquoi, nous devons considérer le concept de « désintégration ». En C , les tableaux se désintègrent en pointeurs vers leurs premiers éléments lorsqu'ils sont utilisés dans une expression. Par conséquent, l'instruction :
if (iar1 == iar2)
est équivalente à :
if (&iar1[0] == &iar2[0])
Puisque &iar1[0] et &iar2[0] représentent des emplacements mémoire différents, la comparaison est évaluée comme fausse.
Alternatives pour la comparaison des tableaux par éléments :
Au lieu de cela Pour comparer des tableaux avec l'opérateur ==, il existe deux approches recommandées :
Pour effectuer une comparaison par élément, vous pouvez parcourir les tableaux et vérifier chaque élément individuellement :
bool areEqual = true; for (int i = 0; i < 5; ++i) { if (iar1[i] != iar2[i]) { areEqual = false; break; } } if (areEqual) { cout << "Arrays are equal."; } else { cout << "Arrays are not equal."; }
La bibliothèque standard C fournit le type std::array, qui permet une comparaison élément par élément à l'aide de l'opérateur == :
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!