Heim >Backend-Entwicklung >C++ >Warum kann „==' Arrays in C nicht auf Gleichheit vergleichen?

Warum kann „==' Arrays in C nicht auf Gleichheit vergleichen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-16 09:17:03283Durchsuche

Why Does `==` Fail to Compare Arrays for Equality in C  ?

Rätsel beim Array-Gleichheitsvergleich: Warum ist == nicht gleich Arrays?

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

Zum Entsetzen vieler gibt dieser Code fälschlicherweise „Arrays sind nicht gleich“ aus. Warum scheitert dieser Vergleich so unerwartet?

Array Decaying Unraveled

Der Grund liegt im Konzept des „Array Decay“. In C zerfallen Arrays automatisch in Zeiger auf ihre ersten Elemente, wenn sie in bestimmten Kontexten verwendet werden, wie hier im Vergleichsoperator. Infolgedessen vergleichen iar1 und iar2 effektiv die Adressen der ersten Elemente, die für verschiedene Arrays unterschiedlich sind.

Elementweiser Vergleich

Um korrekt zu bestimmen, ob zwei Arrays haben die gleichen Elemente, ein elementweiser Vergleich ist erforderlich. Um dies zu erreichen, kann man entweder eine Schleife implementieren, um jedes Element einzeln zu vergleichen, oder den std::array-Container aus der C-Standardbibliothek verwenden.

std::array to the Rescue

std::array ist ein Container mit fester Größe, der sich wie ein Array verhält, aber zusätzliche Funktionalität bietet, einschließlich der Möglichkeit, zwei Arrays auf elementweise Gleichheit zu vergleichen. Hier ist ein überarbeiteter Codeausschnitt mit std::array:

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
}

Jetzt gibt der Code korrekt „Arrays sind gleich“ aus.

Zusammenfassung der Weisheit

  • Array-Zerfall kann zu unerwarteter Gleichheit führen Vergleiche.
  • Ein elementweiser Vergleich ist entscheidend für einen genauen Array-Vergleich.
  • std::array bietet eine praktische Möglichkeit, elementweise Gleichheitsprüfungen durchzuführen.
  • Es ist immer klug die Feinheiten von Sprachfunktionen wie Array-Zerfall zu verstehen, um häufige Fallstricke zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum kann „==' Arrays in C nicht auf Gleichheit vergleichen?. 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