Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mendapatkan Saiz Tatasusunan yang Diluluskan sebagai Penunjuk dalam C?

Bagaimanakah Saya Boleh Mendapatkan Saiz Tatasusunan yang Diluluskan sebagai Penunjuk dalam C?

Patricia Arquette
Lepaskan: 2024-12-22 03:52:12
asal
258 orang telah melayarinya

How Can I Get the Size of an Array Passed as a Pointer in C  ?

Mendapatkan Saiz Tatasusunan daripada Penunjuk dalam C

Dalam C , menentukan saiz tatasusunan yang diluluskan sebagai penuding boleh menjadi mencabar. Tatasusunan mempamerkan "kesetaraan tatasusunan/penunjuk", di mana tatasusunan boleh mereput kepada penuding apabila diluluskan sebagai hujah fungsi. Ini menimbulkan masalah untuk menentukan saiz tatasusunan dengan tepat.

Untuk mengatasi isu ini, kita tidak boleh bergantung pada sizeof() kerana ia mengembalikan saiz penuding, yang biasanya 4 atau 8 bait, bukan bilangan elemen dalam tatasusunan. Sebaliknya, kita mesti menghantar saiz tatasusunan secara eksplisit sebagai hujah tambahan.

Penyelesaian:

Ubah suai pengepala fungsi untuk memasukkan parameter bagi saiz tatasusunan:

int largest(int *list, size_t size)
Salin selepas log masuk

Lepasi saiz tatasusunan bersama-sama dengan penunjuk ke fungsi:

static const size_t ArraySize = 5;
int array[ArraySize];
int result = largest(array, ArraySize);
Salin selepas log masuk

Dengan menghantar saiz secara eksplisit, fungsi boleh menentukan bilangan elemen dalam tatasusunan dengan sewajarnya.

Pendekatan Alternatif:

Jika kita hanya mempunyai penunjuk kepada tatasusunan dan bukan pembolehubah tatasusunan asal, kita boleh mengira saiz menggunakan yang berikut formula:

size = sizeof(pointer_variable) / sizeof(array_element_type)
Salin selepas log masuk

Sebagai contoh, jika kita mempunyai penunjuk int *ptr kepada tatasusunan integer dengan saiz yang tidak diketahui, kita boleh menentukan saiz seperti berikut:

size = sizeof(ptr) / sizeof(int);
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Saiz Tatasusunan yang Diluluskan sebagai Penunjuk dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan