Heim >Backend-Entwicklung >C++ >Warum werden C-Arrays mit dem ==-Operator als ungleich verglichen?
Array-Gleichheitsvergleich in C verstehen
Beim Vergleich von Arrays mit dem ==-Operator stoßen Programmierer oft auf unerwartete Ergebnisse. Um dieses Problem genauer zu untersuchen, analysieren wir den folgenden Codeausschnitt:
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."; }
Obwohl der Code identische Elemente enthält, gibt er „Arrays sind nicht gleich“ aus. Um dieses Verhalten zu verstehen, müssen wir untersuchen, wie C Array-Vergleiche handhabt.
Beim Array-Vergleich mit == reduziert sich der Ausdruck auf den Vergleich der Zeiger auf die ersten Elemente jedes Arrays. In diesem Fall stellen iar1 und iar2 jedoch zwei unterschiedliche Arrays dar, die an unterschiedlichen Speicheradressen gespeichert sind. Somit ergeben sie ungleiche Zeiger, was zur Ausgabe „ungleich“ führt.
Um einen elementweisen Vergleich durchzuführen, können alternative Ansätze verwendet werden. Eine Methode besteht darin, eine Schleife zu verwenden, um jedes Element einzeln zu vergleichen. Alternativ bietet std::array für C 11 und höher einen strukturierteren Ansatz für die Array-Verarbeitung. Im überarbeiteten Code unten wird std::array verwendet, um die Arrays darzustellen, und der Operator == führt einen elementweisen Vergleich durch, der das erwartete Ergebnis liefert:
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 }
Das obige ist der detaillierte Inhalt vonWarum werden C-Arrays mit dem ==-Operator als ungleich verglichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!