Für dieses spezielle Beispiel, ja, es gibt, WENN Sie typedefs verwenden (siehe unten). Natürlich, wenn Sie es auf diese Weise tun, sind Sie genauso gut aus, um SIZEOF_DAYS verwenden, da Sie wissen, was der Zeiger zeigt auf.
Wenn Sie einen (void *)-Zeiger haben, wie er von malloc() oder ähnlichem zurückgegeben wird, dann gibt es keine Möglichkeit, festzustellen, auf welche Datenstruktur der Zeiger zeigt, und somit auch keine Möglichkeit, seine Größe zu bestimmen.
#include <stdio.h>
#define NUM_DAYS 5
typedef int days_t[ NUM_DAYS ];
#define SIZEOF_DAYS ( sizeof( days_t ) )
int main() {
days_t days;
days_t *ptr = &days;
printf( "SIZEOF_DAYS: %u\n", SIZEOF_DAYS );
printf( "sizeof(days): %u\n", sizeof(days) );
printf( "sizeof(*ptr): %u\n", sizeof(*ptr) );
printf( "sizeof(ptr): %u\n", sizeof(ptr) );
return 0;
}
Ausgabe:
SIZEOF_DAYS: 20
sizeof(days): 20
sizeof(*ptr): 20
sizeof(ptr): 4