C で `==` が配列の等しいかどうかの比較に失敗するのはなぜですか?

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

Why Does `==` Fail to Compare Arrays for Equality in 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 では、配列は、ここでの比較演算子の場合のように、特定のコンテキストで使用されると、最初の要素へのポインターに自動的に減衰します。その結果、iar1 と iar2 は、配列ごとに異なる最初の要素のアドレスを効率的に比較します。

要素ごとの比較

2 つであるかどうかを正しく判断するには配列には同じ要素が含まれているため、要素ごとの比較が必要です。これを実現するには、各要素を個別に比較するループを実装するか、C 標準ライブラリの std::array コンテナを利用します。

std::array から Rescue

std::array は配列として動作する固定サイズのコンテナですが、2 つの配列を要素ごとに比較する機能などの追加機能を提供します。平等。以下は、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
}
ログイン後にコピー

を使用して修正されたコード スニペットです。これで、コードは「配列は等しい」と正しく出力されるようになります。

知恵の要約

  • 配列の減衰により予期しない等価性が生じる可能性があります
  • 配列の正確な比較には、要素ごとの比較が重要です。
  • std::array は、要素ごとの等価性チェックを実行する便利な方法を提供します。
  • これは常に賢明です。よくある落とし穴を避けるために、配列の減衰などの言語機能の複雑さを理解します。

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

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