Rumah >pembangunan bahagian belakang >C++ >Mengapakah `==` Tidak Berfungsi untuk Perbandingan Kesamaan Tatasusunan dalam C ?

Mengapakah `==` Tidak Berfungsi untuk Perbandingan Kesamaan Tatasusunan dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-11-16 11:26:03483semak imbas

Why Does `==` Not Work for Array Equality Comparison in C  ?

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!

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