sizeof() Anomali Apabila Menghantar Tatasusunan ke Fungsi dalam C
Dalam C , operator sizeof() bertindak secara berbeza apabila ia melibatkan tatasusunan dihantar ke fungsi daripada apabila ia digunakan dalam fungsi utama. Percanggahan ini boleh mengelirukan bagi pemula.
Harian Tatasusunan yang Betul
Untuk menghantar tatasusunan dengan betul kepada fungsi, adalah penting untuk menghantarnya melalui rujukan, menggunakan sintaks:
int length_of_array(int (&arr)[N]);
Di mana:
Menggunakan Sizeof() dalam Fungsi
Apabila menggunakan sizeof() dalam fungsi, perkara berikut adalah benar:
sizeof(arr) == N * sizeof(int);
Penjelasan:
Masalah dengan Hantaran Tatasusunan yang Salah
Dalam coretan kod yang disediakan, fungsi length_of_array() secara tidak sengaja melepasi tatasusunan melalui penuding, seperti ini:
int length_of_array(int some_list[]);
Kaedah hantaran yang salah ini menyebabkan isu berikut:
Penyelesaian Menggunakan Templat
Untuk mengatasi had ini, seseorang boleh menggunakan pendekatan berasaskan templat seperti ini:
template<size_t N> int length_of_array(int (&arr)[N]) { std::cout << N << std::endl; // Will output the correct array size return N; }
Isi Utama:
Perbezaan penting antara kedua-dua kaedah terletak pada menghantar tatasusunan melalui rujukan berbanding menghantarnya melalui penuding. Yang pertama mengekalkan pengetahuan tentang saiz tatasusunan, manakala yang kedua tidak.
Atas ialah kandungan terperinci Mengapa sizeof() Berkelakuan Berbeza Apabila Menghantar Tatasusunan kepada Fungsi dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!