Rumah > pembangunan bahagian belakang > C++ > Mengapakah `sizeof()` Mengembalikan Keputusan Tidak Dijangka untuk Parameter Tatasusunan dalam Fungsi C?

Mengapakah `sizeof()` Mengembalikan Keputusan Tidak Dijangka untuk Parameter Tatasusunan dalam Fungsi C?

Susan Sarandon
Lepaskan: 2024-11-11 07:31:02
asal
406 orang telah melayarinya

Why Does `sizeof()` Return Unexpected Results for Array Parameters in C   Functions?

Mengapa sizeof() Tidak Berfungsi Sama untuk Parameter Tatasusunan dalam Fungsi C

Dalam C , tatasusunan mereput menjadi penunjuk apabila dihantar ke fungsi, menjadikan penggunaan sizeof() tidak boleh dipercayai untuk menentukan saiz tatasusunan. Untuk memahami perkara ini, mari kita analisa fungsi berikut:

int length_of_array(int some_list[])
{
    return sizeof(some_list) / sizeof(*some_list);
}
Salin selepas log masuk

Isu dengan Parameter Tatasusunan

Parameter some_list diisytiharkan sebagai tatasusunan, tetapi tandatangan fungsi ialah berkesan bersamaan dengan int length_of_array(int* some_list). Ini kerana tatasusunan mereput menjadi penunjuk dalam parameter fungsi.

Kesan pada sizeof()

Menggunakan sizeof(some_list) dalam konteks ini mengira saiz penunjuk, menghasilkan dalam nilai 1. Membahagi dengan sizeof(*some_list) (saiz integer) menghasilkan 1.

Contoh

Dalam contoh yang diberikan, walaupun array num_list mengandungi 15 elemen, fungsi length_of_array() secara konsisten mengembalikan 1, seperti yang dilihat dalam output:

This is the output from direct coding in the
int main function:
15
This is the length of the array determined
by the length_of_array function:
1
Salin selepas log masuk

Penyelesaian Menggunakan Templat Fungsi

Untuk menentukan saiz tatasusunan dalam fungsi, seseorang boleh menggunakan fungsi templat dan lulus tatasusunan dengan rujukan:

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    return N;
}
Salin selepas log masuk

Dalam kes ini, parameter templat N menangkap saiz yang diketahui tatasusunan, membenarkan sizeof() mengembalikan nilai yang betul.

Atas ialah kandungan terperinci Mengapakah `sizeof()` Mengembalikan Keputusan Tidak Dijangka untuk Parameter Tatasusunan dalam Fungsi 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