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

Mary-Kate Olsen
Lepaskan: 2024-11-16 09:17:03
asal
218 orang telah melayarinya

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.";
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan