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 (&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!