Menentukan Saiz Tatasusunan dalam Fungsi Lulus
Masalah timbul dalam C , di mana menentukan saiz tatasusunan yang dihantar kepada fungsi menimbulkan cabaran disebabkan oleh ketidakupayaan saiz untuk menangkap panjang tatasusunan dengan tepat.
Satu penyelesaian popular mencadangkan penamatan gelung apabila tatasusunan elemen tatasusunan[i] mencapai NULL. Walau bagaimanapun, pendekatan ini boleh membawa kepada ralat, kerana tatasusunan[i] kadangkala mengandungi nilai sampah rawak berhampiran penghujung tatasusunan.
Penyelesaian Berasaskan Templat dengan Rujukan Tatasusunan
C menawarkan penyelesaian yang lebih dipercayai melalui templat dan rujukan tatasusunan:
template <typename T, int N> void func(T (&a)[N]) { for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements }
Fungsi berasaskan templat ini mengambil tatasusunan jenis T dengan saiz tetap N. Dengan menggunakan operator rujukan &, ia mengikat tatasusunan asal kepada a, membenarkan akses kepada elemen tatasusunan tanpa menghantar saiz secara eksplisit.
Untuk menggunakan fungsi ini, hanya isytiharkan tatasusunan dan hantarkannya melalui rujukan:
int x[10]; func(x);
Adalah penting untuk ambil perhatian bahawa penyelesaian ini hanya terpakai kepada tatasusunan, bukan petunjuk. Untuk tatasusunan berasaskan penunjuk, pilihan yang lebih baik ialah menggunakan bekas Pustaka Templat Standard (STL) std::vector, yang menyediakan saiz dan keupayaan akses elemen.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Saiz Tatasusunan yang Dilalui kepada Fungsi C dengan Boleh Dipercayai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!