C での配列の等価性比較に「==」が機能しないのはなぜですか?

Patricia Arquette
リリース: 2024-11-16 11:26:03
オリジナル
394 人が閲覧しました

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

== を使用した配列の等価比較が機能しないのはなぜですか?

C では、等価演算子 (==) は、次のメモリ アドレスを比較します。内容ではなく配列。この動作は、配列要素を要素ごとに比較するという直観的な期待とは異なるため、混乱を招く可能性があります。

次のコードを考えてみましょう。

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.";
}
ログイン後にコピー

このコードでは、2 つの配列が作成されます。同一の内容で。ただし、出力には配列が等しくないことが示されます。これは、== 演算子が配列ごとに異なる配列のメモリ アドレスを比較するためです。

配列の要素ごとの比較を実行するには、ループを使用するか、std::array を利用します。クラス。 std::array クラスは、配列を操作するためのわずかに異なるインターフェイスを提供し、直接等価比較をサポートします。

ループを使用した例:

bool arraysEqual(int *arr1, int *arr2, int size)
{
    for (int i = 0; i < size; ++i)
    {
        if (arr1[i] != arr2[i])
            return false;
    }
    return true;
}
ログイン後にコピー

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.";
}
ログイン後にコピー

以上がC での配列の等価性比較に「==」が機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート