Heim >Backend-Entwicklung >C++ >Warum funktioniert „==' nicht für den Array-Gleichheitsvergleich in C?

Warum funktioniert „==' nicht für den Array-Gleichheitsvergleich in C?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-16 11:26:03457Durchsuche

Why Does `==` Not Work for Array Equality Comparison in C  ?

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!

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