Heim >Backend-Entwicklung >C++ >Warum werden C-Arrays mit dem ==-Operator als ungleich verglichen?

Warum werden C-Arrays mit dem ==-Operator als ungleich verglichen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-03 00:12:11481Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn