C 配列の比較に `==` 演算子が機能しないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-16 17:00:03
オリジナル
833 人が閲覧しました

Why does the `==` operator not work for comparing C   arrays?

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

このコードの出力で配列が等しくないことが示されるのはなぜですか?

答え:

等価演算子 == は要素ごとに実行されません。配列の比較。代わりに、配列のアドレスを比較します。配列は別個のメモリ位置に格納されているため、常に異なります。

その理由を理解するには、「減衰」の概念を考慮する必要があります。 C では、配列が式で使用されると、配列は最初の要素へのポインターに変化します。したがって、ステートメント:

if (iar1 == iar2)
ログイン後にコピー

は次と同等です:

if (&iar1[0] == &iar2[0])
ログイン後にコピー

&iar1[0] と &iar2[0] は異なるメモリ位置を表すため、比較は false と評価されます。

要素ごとの配列比較の代替案:

== 演算子を使用して配列を比較する代わりに、次の 2 つの推奨アプローチがあります:

  1. ループの使用:

要素ごとの比較を実行するには、配列を反復処理して各要素を個別にチェックできます:

bool areEqual = true;
for (int i = 0; i < 5; ++i) {
    if (iar1[i] != iar2[i]) {
        areEqual = false;
        break;
    }
}

if (areEqual) {
    cout << "Arrays are equal.";
} else {
    cout << "Arrays are not equal.";
}
ログイン後にコピー
  1. std::array の使用:

C 標準ライブラリでは 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) {
    cout << "Arrays are equal.";
} else {
    cout << "Arrays are not equal.";
}
ログイン後にコピー

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

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