Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `==` Gagal Membandingkan Tatasusunan untuk Kesamaan dalam 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
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!