Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Saiz Tatasusunan yang Dilalui kepada Fungsi C dengan Boleh Dipercayai?

Bagaimanakah Saya Boleh Menentukan Saiz Tatasusunan yang Dilalui kepada Fungsi C dengan Boleh Dipercayai?

Susan Sarandon
Susan Sarandonasal
2024-12-30 02:53:28819semak imbas

How Can I Reliably Determine the Size of an Array Passed to a C   Function?

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!

Kenyataan:
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