Rumah >pembangunan bahagian belakang >C++ >Mengapa pengendali `==` tidak berfungsi untuk membandingkan tatasusunan C?

Mengapa pengendali `==` tidak berfungsi untuk membandingkan tatasusunan C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 17:00:03903semak imbas

Why does the `==` operator not work for comparing C   arrays?

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:

  1. Menggunakan Gelung:

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.";
}
  1. Menggunakan std::array:

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!

Kenyataan:
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