Maison > développement back-end > C++ > Pourquoi les tableaux C sont-ils inégaux à l'aide de l'opérateur == ?

Pourquoi les tableaux C sont-ils inégaux à l'aide de l'opérateur == ?

Mary-Kate Olsen
Libérer: 2024-12-03 00:12:11
original
558 Les gens l'ont consulté

Why Do C   Arrays Compare as Unequal Using the == Operator?

Comprendre la comparaison de l'égalité des tableaux en C

Lors de la comparaison de tableaux à l'aide de l'opérateur ==, les programmeurs rencontrent souvent des résultats inattendus. Pour approfondir ce problème, analysons l'extrait de code ci-dessous :

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

Bien qu'il contienne des éléments identiques, le code affiche "Les tableaux ne sont pas égaux". Pour comprendre ce comportement, nous devons examiner comment C gère les comparaisons de tableaux.

Lors de la comparaison de tableaux à l'aide de ==, l'expression se réduit à comparer les pointeurs vers les premiers éléments de chaque tableau. Cependant, dans ce cas, iar1 et iar2 représentent deux tableaux distincts stockés à des adresses mémoire différentes. Ainsi, ils évaluent des pointeurs inégaux, ce qui donne un résultat « différent ».

Pour effectuer une comparaison par élément, des approches alternatives peuvent être utilisées. Une méthode consiste à utiliser une boucle pour comparer chaque élément individuellement. Alternativement, pour C 11 et versions ultérieures, std::array fournit une approche plus structurée pour la gestion des tableaux. Dans le code révisé ci-dessous, std::array est utilisé pour représenter les tableaux, et l'opérateur == effectue une comparaison par élément, donnant le résultat attendu :

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

}
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!

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