Heim > Backend-Entwicklung > C++ > Hauptteil

Warum funktioniert der Operator „==' nicht zum Vergleichen von C-Arrays?

Mary-Kate Olsen
Freigeben: 2024-11-16 17:00:03
Original
834 Leute haben es durchsucht

Why does the `==` operator not work for comparing C   arrays?

Array-Gleichheitsvergleich in C verstehen

Arrays sind eine grundlegende Datenstruktur in C, aber ihr Gleichheitsvergleich mit dem ==-Operator führt oft dazu zu unerwarteten Ergebnissen. Dieser Artikel soll klären, warum dies auftritt, und Alternativen für die Durchführung elementweiser Array-Vergleiche bereitstellen.

Problem:

Bedenken Sie 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.";
}
Nach dem Login kopieren

Warum zeigt die Ausgabe dieses Codes an, dass dies bei den Arrays nicht der Fall ist? gleich?

Antwort:

Der Gleichheitsoperator == führt keinen elementweisen Vergleich für Arrays durch. Stattdessen werden die Adressen der Arrays verglichen, die immer unterschiedlich sind, da sie an unterschiedlichen Speicherorten gespeichert sind.

Um zu verstehen, warum, müssen wir das Konzept des „Zerfalls“ betrachten. In C zerfallen Arrays in Zeiger auf ihre ersten Elemente, wenn sie in einem Ausdruck verwendet werden. Daher ist die Aussage:

if (iar1 == iar2)
Nach dem Login kopieren

äquivalent zu:

if (&iar1[0] == &iar2[0])
Nach dem Login kopieren

Da &iar1[0] und &iar2[0] unterschiedliche Speicherorte darstellen, wird der Vergleich als falsch ausgewertet.

Alternativen für den elementweisen Array-Vergleich:

Anstelle von Beim Vergleich von Arrays mit dem ==-Operator gibt es zwei empfohlene Ansätze:

  1. Verwenden einer Schleife:

Um einen elementweisen Vergleich durchzuführen, können Sie kann über die Arrays iterieren und jedes Element einzeln überprüfen:

bool areEqual = true;
for (int i = 0; i < 5; ++i) {
    if (iar1[i] != iar2[i]) {
        areEqual = false;
        break;
    }
}

if (areEqual) {
    cout << "Arrays are equal.";
} else {
    cout << "Arrays are not equal.";
}
Nach dem Login kopieren
  1. Using std::array:

Die C-Standardbibliothek stellt den Typ std::array bereit, der einen elementweisen Vergleich mit dem Operator == ermöglicht:

std::array<int, 5> iar1 {1, 2, 3, 4, 5};
std::array<int, 5> iar2 {1, 2, 3, 4, 5};

if (iar1 == iar2) {
    cout << "Arrays are equal.";
} else {
    cout << "Arrays are not equal.";
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum funktioniert der Operator „==' nicht zum Vergleichen von C-Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage