Rumah >pembangunan bahagian belakang >C++ >Mengapa pengendali `==` tidak berfungsi untuk membandingkan tatasusunan C?
Memahami Perbandingan Kesamaan Array dalam C
Array ialah struktur data asas dalam C , tetapi perbandingan kesamaan mereka menggunakan operator == sering mendahului kepada keputusan yang tidak dijangka. Artikel ini bertujuan untuk menjelaskan sebab ini berlaku dan menyediakan alternatif untuk melaksanakan perbandingan tatasusunan mengikut unsur.
Masalah:
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."; }
Mengapakah output daripada kod ini menunjukkan bahawa tatasusunan tidak sama?
Jawapan:
Pengendali kesaksamaan == tidak melaksanakan elemen-bijaksana perbandingan untuk tatasusunan. Sebaliknya, ia membandingkan alamat tatasusunan, yang sentiasa berbeza kerana ia disimpan di lokasi memori yang berbeza.
Untuk memahami sebabnya, kita perlu mempertimbangkan konsep "pereputan". Dalam C , tatasusunan mereput kepada penunjuk kepada elemen pertamanya apabila ia digunakan dalam ungkapan. Oleh itu, pernyataan:
if (iar1 == iar2)
bersamaan dengan:
if (&iar1[0] == &iar2[0])
Memandangkan &iar1[0] dan &iar2[0] mewakili lokasi memori yang berbeza, perbandingan itu dinilai palsu.
Alternatif untuk Perbandingan Tatasusunan Element-Wise:
Daripada membandingkan tatasusunan dengan operator ==, terdapat dua pendekatan yang disyorkan:
Untuk melakukan perbandingan mengikut elemen, anda boleh melelang ke atas tatasusunan dan menyemak setiap elemen secara individu:
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 Standard Library menyediakan jenis std::array, yang membolehkan perbandingan mengikut unsur menggunakan operator ==:
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."; }
Atas ialah kandungan terperinci Mengapa pengendali `==` tidak berfungsi untuk membandingkan tatasusunan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!