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!