Rumah >pembangunan bahagian belakang >C++ >Bagaimana Anda Menentukan Saiz Tatasusunan yang Dilalui kepada Fungsi C?

Bagaimana Anda Menentukan Saiz Tatasusunan yang Dilalui kepada Fungsi C?

DDD
DDDasal
2024-11-08 14:38:02848semak imbas

How Do You Determine the Size of an Array Passed to a C   Function?

Menentukan Saiz Tatasusunan Apabila Melewati Fungsi dalam C

Tidak seperti dalam fungsi utama, di mana sizeof() mengembalikan saiz tatasusunan secara langsung , menghantar tatasusunan kepada fungsi memerlukan pertimbangan kerana pereputan tatasusunan kepada penuding.

Reput Tatasusunan kepada Penunjuk

Apabila diluluskan sebagai hujah, tatasusunan mereput kepada penunjuk kepada penunjuknya unsur pertama. Ini bermakna ungkapan sizeof(some_list) dalam fungsi akan memberikan saiz penuding, bukan saiz keseluruhan tatasusunan.

Masalah Nisbah Saiz

Menggunakan ungkapan (sizeof(some_list)/sizeof(*some_list)) untuk mengira saiz tatasusunan tidak berfungsi kerana:

  • sizeof(some_list) mengembalikan saiz penunjuk, yang biasanya 4 bait ( untuk sistem 32-bit).
  • sizeof(*some_list) mengembalikan saiz elemen tatasusunan individu, yang biasanya 4 bait untuk integer.

Nisbah ini sentiasa menghasilkan 1 , tanpa mengira saiz tatasusunan. Oleh itu, fungsi length_of_array sentiasa mengembalikan 1.

Kaedah Alternatif Menggunakan Templat

Untuk menentukan saiz tatasusunan dengan tepat apabila dihantar ke fungsi, gunakan templat:

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    return N;
}

Pendekatan ini menggunakan parameter templat N untuk menentukan saiz tatasusunan, yang kemudiannya dikembalikan oleh fungsi.

Atas ialah kandungan terperinci Bagaimana Anda Menentukan Saiz Tatasusunan yang Dilalui kepada Fungsi 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