Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Saiz Tatasusunan yang Dilalui sebagai Argumen Fungsi dalam C?

Bagaimanakah Saya Boleh Menentukan Saiz Tatasusunan yang Dilalui sebagai Argumen Fungsi dalam C?

DDD
DDDasal
2024-12-20 15:41:13773semak imbas

How Can I Determine the Size of an Array Passed as a Function Argument in C  ?

Menentukan Saiz Tatasusunan Apabila Diluluskan sebagai Argumen Fungsi

Memahami saiz tatasusunan semasa menghantarnya ke fungsi lain tanpa menyatakan saiznya secara jelas boleh menjadi cabaran dalam C . Soalan ini timbul daripada keperluan untuk melaksanakan gelung dalam fungsi yang menerima tatasusunan sebagai hujah.

Pendekatan awal, menggunakan semakan bersyarat untuk nilai penunjuk NULL, terbukti tidak mencukupi kerana potensi kehadiran nilai yang tidak dijangka dalam tatasusunan.

Pendekatan C Menggunakan Templat

Penyelesaian yang berkesan dalam C melibatkan memanfaatkan templat dan menghantar tatasusunan melalui rujukan:

template <typename T, int N>
void func(T (&amp;a)[N]) {
    for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements
}

Dengan menentukan saiz tatasusunan N sebagai parameter templat, fungsi mengetahui saiz tatasusunan yang tepat ia berfungsi. Pendekatan ini memastikan gelung berulang mengikut bilangan elemen yang dimaksudkan.

Untuk menggunakan fungsi templat ini, tatasusunan boleh dihantar seperti berikut:

int x[10];
func(x);

Pertimbangan

Ia penting untuk ambil perhatian bahawa pendekatan ini hanya berfungsi untuk tatasusunan, bukan penunjuk. Untuk penyelesaian yang lebih serba boleh, menggunakan bekas perpustakaan standard seperti std::vector mungkin merupakan pilihan yang lebih baik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Saiz Tatasusunan yang Dilalui sebagai Argumen Fungsi dalam C?. 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