Maison >développement back-end >C++ >Pourquoi `==` ne parvient-il pas à comparer les tableaux pour l'égalité en C ?

Pourquoi `==` ne parvient-il pas à comparer les tableaux pour l'égalité en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 09:17:03280parcourir

Why Does `==` Fail to Compare Arrays for Equality in C  ?

Mystère de la comparaison de l'égalité des tableaux : pourquoi == n'est-il pas égal aux tableaux ?

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

Au grand désarroi de beaucoup, ce code affiche de manière incorrecte "Les tableaux ne sont pas égaux". Pourquoi cette comparaison échoue-t-elle de manière si inattendue ?

Array Decayed Unraveled

La raison réside dans le concept de « dégradation des tableaux ». En C , les tableaux se désintègrent automatiquement en pointeurs vers leurs premiers éléments lorsqu'ils sont utilisés dans certains contextes, comme dans l'opérateur de comparaison ici. En conséquence, iar1 et iar2 comparent efficacement les adresses des premiers éléments, qui sont distinctes pour différents tableaux.

Comparaison par éléments

Pour déterminer correctement si deux les tableaux ont les mêmes éléments, une comparaison par élément est requise. Pour y parvenir, on peut soit implémenter une boucle pour comparer chaque élément individuellement, soit utiliser le conteneur std::array de la bibliothèque standard C.

std::array to the Rescue

std::array est un conteneur de taille fixe qui se comporte comme un tableau mais fournit des fonctionnalités supplémentaires, notamment la possibilité de comparer deux tableaux pour une égalité entre éléments. Voici un extrait de code révisé utilisant std::array :

std::array<int, 5> iar1 {1, 2, 3, 4, 5};
std::array<int, 5> iar2 {1, 2, 3, 4, 5};

if (iar1 == iar2) {
    // arrays contents are the same
} else {
    // not the same
}

Maintenant, le code affichera correctement "Les tableaux sont égaux."

Récapitulatif de la sagesse

  • La dégradation des tableaux peut conduire à une égalité inattendue comparaisons.
  • La comparaison par élément est cruciale pour une comparaison précise des tableaux.
  • std::array fournit un moyen pratique d'effectuer des vérifications d'égalité par élément.
  • C'est toujours sage comprendre les subtilités des fonctionnalités du langage telles que la dégradation des tableaux afin d'éviter les pièges courants.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn