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 つの推奨アプローチがあります:
要素ごとの比較を実行するには、配列を反復処理して各要素を個別にチェックできます:
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."; }
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 サイトの他の関連記事を参照してください。