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

Patricia Arquette
Lepaskan: 2024-11-16 11:26:03
asal
393 orang telah melayarinya

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.";
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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.";
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan