ホームページ > バックエンド開発 > C++ > == 演算子を使用すると C 配列の比較が等しくないのはなぜですか?

== 演算子を使用すると C 配列の比較が等しくないのはなぜですか?

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

Why Do C   Arrays Compare as Unequal Using the == Operator?

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 つの異なる配列を表します。したがって、これらは等しくないポインタとして評価され、「等しくない」出力が得られます。

要素ごとの比較を実行するには、別のアプローチを使用できます。 1 つの方法では、ループを使用して各要素を個別に比較します。また、C 11 以降では、std::array により配列処理のためのより構造化されたアプローチが提供されます。以下の修正されたコードでは、配列を表すために 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

}
ログイン後にコピー

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

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