Rumah >pembangunan bahagian belakang >C++ >Mengapakah `sizeof()` Berkelakuan Berbeza untuk Argumen Tatasusunan dalam Fungsi C?

Mengapakah `sizeof()` Berkelakuan Berbeza untuk Argumen Tatasusunan dalam Fungsi C?

Barbara Streisand
Barbara Streisandasal
2024-11-12 01:35:02872semak imbas

Why Does `sizeof()` Behave Differently for Array Arguments in C   Functions?

Apabila sizeof() Berkelakuan Berbeza dalam Fungsi untuk Argumen Tatasusunan

Dalam C , apabila menghantar tatasusunan kepada fungsi, adalah penting untuk memahami mengapa sizeof() mungkin tidak berfungsi sama seperti apabila digunakan dalam fungsi utama.

Array Decay to Pointer

Tidak seperti bahasa seperti Java, di mana tatasusunan ialah objek benar dengan kaedah dan sifat, dalam C , tatasusunan hanyalah penunjuk. Apabila tatasusunan dihantar ke fungsi sebagai hujah, ia mereput kepada penuding kepada elemen pertama tatasusunan.

saiz() pada Penunjuk lwn Tatasusunan

Dalam fungsi utama, sizeof() yang digunakan pada tatasusunan mengembalikan jumlah saiz tatasusunan dalam bait, termasuk semua elemennya. Walau bagaimanapun, apabila sizeof() digunakan pada penunjuk reput kepada tatasusunan dalam fungsi, ia mengembalikan saiz penunjuk itu sendiri, yang biasanya saiz jenis integer (cth., sizeof(int)).

Penyelesaian untuk Menentukan Saiz Tatasusunan

Untuk menentukan saiz tatasusunan yang telah mereput kepada penunjuk, kod folgende boleh digunakan:

int length_of_array(int* some_list)
{
    // Not applicable here, but see below for when it might be
    
    return 0;
}

Pengecualian: Tatasusunan yang Dilalui oleh Rujukan

Terdapat satu pengecualian kepada peraturan pereputan tatasusunan. Tatasusunan juga boleh dihantar melalui rujukan, membenarkan akses kepada maklumat saiznya. Sintaks untuk ini ialah:

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    // Size of the array can be determined via the template parameter N
    
    return N;
}

Dalam kes ini, N mewakili saiz tatasusunan yang dihantar dan ia boleh digunakan untuk menentukan panjang tatasusunan dengan tepat.

Atas ialah kandungan terperinci Mengapakah `sizeof()` Berkelakuan Berbeza untuk Argumen Tatasusunan dalam Fungsi 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