Memahami Perbandingan Kesamaan Tatasusunan dalam C
Apabila membandingkan tatasusunan menggunakan operator ==, pengaturcara sering menemui hasil yang tidak dijangka. Untuk menyelidiki isu ini, mari kita analisa coretan kod di bawah:
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."; }
Walaupun mengandungi unsur yang sama, kod tersebut mengeluarkan "Arrays are not equal." Untuk memahami tingkah laku ini, kita mesti meneliti cara C mengendalikan perbandingan tatasusunan.
Apabila membandingkan tatasusunan menggunakan ==, ungkapan itu dikurangkan kepada membandingkan penunjuk kepada elemen pertama setiap tatasusunan. Walau bagaimanapun, dalam kes ini, iar1 dan iar2 mewakili dua tatasusunan berbeza yang disimpan pada alamat memori yang berbeza. Oleh itu, mereka menilai kepada petunjuk yang tidak sama, menghasilkan output "tidak sama".
Untuk melakukan perbandingan mengikut unsur, pendekatan alternatif boleh digunakan. Satu kaedah melibatkan penggunaan gelung untuk membandingkan setiap elemen secara individu. Sebagai alternatif, untuk C 11 dan lebih baru, std::array menyediakan pendekatan yang lebih berstruktur untuk pengendalian tatasusunan. Dalam kod yang disemak di bawah, std::array digunakan untuk mewakili tatasusunan, dan operator == melakukan perbandingan mengikut unsur, menghasilkan hasil yang dijangkakan:
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 }
Atas ialah kandungan terperinci Mengapa Tatasusunan C Dibandingkan sebagai Tidak Sama Menggunakan Operator ==?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!