Considera i prototipi delle funzioni di allocazione dinamica di C
malloc - void* malloc(size_t size);
calloc - void* calloc(size_t n,size);
realloc - void* realloc(void* ptr,size_t newsize);
Ora una frase come la seguente
int* p=(int*)malloc(sizeof(int));
So che trasmettere in (int *) non è necessario in C poiché un puntatore del vuoto può essere assegnato a una variabile puntatore di qualsiasi tipo di oggetto, ma perché queste funzioni per default non restituiscono un puntatore completamente digitato ?. Non sarebbe bello se restituisse int * invece di puntatore vuoto in questo caso? Qual è la ragione void * è scelto come tipo di ritorno di queste funzioni?
Un'altra domanda: ho letto qui che nei vecchi compilatori C il tipo di puntatore restituito da queste funzioni era char * not void * . È vero?