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

Barbara Streisand
Lepaskan: 2024-11-12 01:35:02
asal
791 orang telah melayarinya

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

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

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!

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