Pour les tableaux dynamiques ( malloc ou C ++ nouveau ), vous devez stocker la taille du tableau comme mentionné par d'autres ou peut-être créer une structure de gestionnaire de tableau qui gère l'ajout, la suppression, le comptage, etc. Malheureusement, C ne le fait pas aussi bien que C ++ puisque vous devez essentiellement le construire pour chaque type de tableau différent que vous stockez, ce qui est lourd si vous avez plusieurs types de tableaux que vous devez gérer.
Pour les tableaux statiques, tels que celui de votre exemple, une macro courante est utilisée pour obtenir la taille, mais elle n'est pas recommandée car elle ne vérifie pas si le paramètre est vraiment un tableau statique. Cependant, la macro est utilisée dans du code réel, par exemple dans les en-têtes du noyau Linux, bien qu'elle puisse être légèrement différente de celle ci-dessous:
#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;
}
Vous pouvez google pour des raisons de se méfier de macros comme celle-ci. Faites attention.
Si possible, le stdlib C ++ tel que vector qui est beaucoup plus sûr et plus facile à utiliser.