Letzteres macht mehr Sinn, da Malloc ja generell Speicher hergibt, ohne zu sagen, daß er longs enthält.
Deswegen bekommst Du erst einen void * vom Malloc. Dein pointer würde dann auf den Typ zeigen, den Du da abspeichern möchtest. Für deine reine Zählung reichts es den bei void * zu belassen.
Aber stell Dir vor, du möchtest den Speicherplatz für ein Degasbild allozieren:
struct Degasbild
{
uint16_t res;
uint16_t palette[16];
uint8_t daten[32000];
};
struct Degasbild * meinBild;
meinBild = (struct Degasbild *) Malloc(sizeof(struct Degasbild));
Du hast einen Zeiger auf die Daten mit Struktur Degasbild. Dann lässt Du dir von Malloc genausoviel Platz geben, Malloc weiss aber nichts, welche Struktur das haben wird. Deswegen transformierst Du den void * den Malloc Dir eigentlich gibt, explizit über den Cast auf einen Pointer auf das Bild.