Heim >Backend-Entwicklung >C++ >Warum kann „==' Arrays in C nicht auf Gleichheit vergleichen?
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
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!