Warum funktioniert der Array-Gleichheitsvergleich mit == nicht?
In C vergleicht der Gleichheitsoperator (==) die Speicheradressen von Arrays und nicht deren Inhalte. Dieses Verhalten kann zu Verwirrung führen, da es sich von der intuitiven Erwartung unterscheidet, Array-Elemente elementweise zu vergleichen.
Bedenken Sie den folgenden Code:
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."; }
In diesem Code werden zwei Arrays erstellt mit identischem Inhalt. Die Ausgabe besagt jedoch, dass die Arrays nicht gleich sind. Dies liegt daran, dass der ==-Operator die Speicheradressen der Arrays vergleicht, die für jedes Array unterschiedlich sind.
Um einen elementweisen Vergleich von Arrays durchzuführen, kann man entweder eine Schleife oder den std::array verwenden Klasse. Die Klasse std::array bietet eine etwas andere Schnittstelle für die Arbeit mit Arrays und unterstützt den direkten Gleichheitsvergleich.
Beispiel mit einer Schleife:
bool arraysEqual(int *arr1, int *arr2, int size) { for (int i = 0; i < size; ++i) { if (arr1[i] != arr2[i]) return false; } return true; }
Beispiel mit std::array:
#include <array> int main() { 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."; }
Das obige ist der detaillierte Inhalt vonWarum funktioniert „==' nicht für den Array-Gleichheitsvergleich in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!