Para las matrices dinámicas ( malloc o C ++ nuevo ) necesita almacenar el tamaño de la matriz como lo mencionan otros o tal vez construir una estructura de administrador de matriz que maneje agregar, eliminar, contar, etc. Desafortunadamente, C no hace esto tan bien como C ++ ya que básicamente tiene que compilarlo para cada tipo de matriz diferente que está almacenando, lo cual es engorroso si tiene múltiples tipos de matrices que necesita administrar.
Para las matrices estáticas, como la de su ejemplo, hay una macro común utilizada para obtener el tamaño, pero no se recomienda ya que no comprueba si el parámetro es realmente una matriz estática. Sin embargo, la macro se usa en código real, por ejemplo, en los encabezados del kernel de Linux, aunque puede ser ligeramente diferente de la siguiente:
#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;
}
Puede buscar en Google por razones para desconfiar de macros como esta. Ten cuidado.
Si es posible, el C ++ stdlib como vector, que es mucho más seguro y fácil de usar.