Untuk array dinamis ( malloc atau C ++ baru ), Anda perlu menyimpan ukuran array seperti yang disebutkan oleh orang lain atau mungkin membangun struktur manajer array yang menangani menambah, menghapus, menghitung, dll. Sayangnya C tidak melakukan ini hampir sebaik C ++ karena pada dasarnya Anda harus membangunnya untuk setiap jenis array berbeda yang Anda simpan yang rumit jika Anda memiliki beberapa jenis array yang perlu Anda kelola.
Untuk array statis, seperti yang ada di contoh Anda, ada makro umum yang digunakan untuk mendapatkan ukuran, tetapi tidak disarankan karena tidak memeriksa apakah parameternya benar-benar array statis. Makro digunakan dalam kode nyata, misalnya dalam header kernel Linux meskipun mungkin sedikit berbeda dari yang di bawah ini:
#if !defined(ARRAY_SIZE)
#define ARRAY_SIZE(x) (sizeof((x)) / sizeof((x)[0]))
#endif
int main()
{
int days[] = {1,2,3,4,5};
int *ptr = days;
printf("%u\n", ARRAY_SIZE(days));
printf("%u\n", sizeof(ptr));
return 0;
}
Anda dapat google karena alasan untuk waspada terhadap makro seperti ini. Hati-hati.
Jika memungkinkan, stdlib C ++ seperti vektor yang jauh lebih aman dan lebih mudah digunakan.