Für dynamische Arrays ( malloc oder C++ neu ) müssen Sie die Größe des Arrays speichern, wie von anderen erwähnt, oder vielleicht eine Array-Manager-Struktur erstellen, die das Hinzufügen, Entfernen, Zählen usw. übernimmt. Leider macht C dies nicht annähernd so gut wie C++, da man es im Grunde für jeden verschiedenen Array-Typ, den man speichert, aufbauen muss, was umständlich ist, wenn man mehrere Arten von Arrays hat, die man verwalten muss.
Für statische Arrays, wie das in Ihrem Beispiel, gibt es ein allgemeines Makro, das verwendet wird, um die Größe zu ermitteln, aber es ist nicht empfohlen da es nicht prüft, ob der Parameter wirklich ein statisches Array ist. Das Makro wird jedoch in echtem Code verwendet, z.B. in den Linux-Kernel-Headern, obwohl es etwas anders aussehen kann als das untenstehende:
#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;
}
Sie können nach Gründen googeln, warum Sie bei solchen Makros vorsichtig sein sollten. Seien Sie vorsichtig.
Wenn möglich, die C++ stdlib wie Vektor, die viel sicherer und einfacher zu bedienen ist.