Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `==` Gagal Membandingkan Tatasusunan untuk Kesamaan dalam C ?

Mengapakah `==` Gagal Membandingkan Tatasusunan untuk Kesamaan dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 09:17:03214semak imbas

Why Does `==` Fail to Compare Arrays for Equality in C  ?

Misteri Perbandingan Kesamaan Tatasusunan: Mengapa == Tidak Tatasusunan Sama?

Pertimbangkan coretan kod berikut:

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.";
}

Yang mengecewakan ramai, kod ini tersalah mencetak "Arrays are not equal." Mengapa perbandingan ini gagal dengan begitu mendadak?

Array Decaying Unraveled

Alasannya terletak pada konsep "array decay." Dalam C , tatasusunan secara automatik mereput kepada penunjuk kepada elemen pertamanya apabila digunakan dalam konteks tertentu, seperti dalam pengendali perbandingan di sini. Akibatnya, iar1 dan iar2 membandingkan dengan berkesan alamat elemen pertama, yang berbeza untuk tatasusunan yang berbeza.

Perbandingan Bijak Unsur

Untuk menentukan dengan betul sama ada dua tatasusunan mempunyai elemen yang sama, perbandingan mengikut unsur diperlukan. Untuk mencapai matlamat ini, seseorang boleh sama ada melaksanakan gelung untuk membandingkan setiap elemen secara individu atau menggunakan bekas std::array daripada Pustaka Standard C.

std::array to the Rescue

std::array ialah bekas bersaiz tetap yang berfungsi sebagai tatasusunan tetapi menyediakan fungsi tambahan, termasuk keupayaan untuk membandingkan dua tatasusunan untuk kesaksamaan dari segi unsur. Berikut ialah coretan kod yang disemak menggunakan 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
}

Sekarang, kod tersebut akan mengeluarkan "Arrays are equal" dengan betul.

Mengingat semula Kebijaksanaan

  • Reputan tatasusunan boleh membawa kepada kesaksamaan yang tidak dijangka perbandingan.
  • Perbandingan mengikut unsur adalah penting untuk perbandingan tatasusunan yang tepat.
  • std::array menyediakan cara yang mudah untuk melakukan semakan kesamaan dari segi unsur.
  • Ia sentiasa bijak untuk memahami selok-belok ciri bahasa seperti pereputan tatasusunan untuk mengelakkan perangkap biasa.

Atas ialah kandungan terperinci Mengapakah `==` Gagal Membandingkan Tatasusunan untuk Kesamaan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn