Оператор *
в объявлении всегда связывается с декларатором; линия
void * malloc (size_t number_bytes);
анализируется как если бы было написано
void (*malloc(size_t number_bytes));
Это случай синтаксиса C, который вы можете написать T *p;
или T* p;
или даже
T * p;
но все они анализируются как T (*p);
- пробел не имеет значения в том, как интерпретируются объявления.