Mengapa perbandingan kesamaan tatasusunan menggunakan == tidak berfungsi?
Dalam C , pengendali kesamaan (==) membandingkan alamat memori bagi tatasusunan, bukannya kandungannya. Tingkah laku ini boleh membawa kepada kekeliruan, kerana ia berbeza daripada jangkaan intuitif untuk membandingkan elemen tatasusunan mengikut elemen.
Pertimbangkan 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."; }
Dalam kod ini, dua tatasusunan dicipta dengan kandungan yang sama. Walau bagaimanapun, output menyatakan bahawa tatasusunan tidak sama. Ini kerana operator == membandingkan alamat memori tatasusunan, yang berbeza untuk setiap tatasusunan.
Untuk melakukan perbandingan tatasusunan mengikut elemen, seseorang boleh sama ada menggunakan gelung atau menggunakan std::array kelas. Kelas std::array menyediakan antara muka yang sedikit berbeza untuk bekerja dengan tatasusunan dan menyokong perbandingan kesamaan langsung.
Contoh menggunakan gelung:
bool arraysEqual(int *arr1, int *arr2, int size) { for (int i = 0; i < size; ++i) { if (arr1[i] != arr2[i]) return false; } return true; }
Contoh menggunakan std::array:
#include <array> int main() { 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 Mengapakah `==` Tidak Berfungsi untuk Perbandingan Kesamaan Tatasusunan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!