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
Mary-Kate Olsenoriginal
2024-12-03 00:12:11484parcourir

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

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

}

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