Maison > développement back-end > C++ > le corps du texte

Pourquoi l'opérateur `==` ne fonctionne-t-il pas pour comparer les tableaux C ?

Mary-Kate Olsen
Libérer: 2024-11-16 17:00:03
original
834 Les gens l'ont consulté

Why does the `==` operator not work for comparing C   arrays?

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.";
}
Copier après la connexion

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)
Copier après la connexion

est équivalente à :

if (&iar1[0] == &iar2[0])
Copier après la connexion

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 :

  1. Utilisation d'une boucle :

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.";
}
Copier après la connexion
  1. En utilisant std::array:

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.";
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal