Il casting è obbligatorio con il C++ ma non con il C.

@fedrock ... se il puntatore è di tipo

database *c;

se lo restituisci allora la funzione deve essere dello stesso tipo ovvero


database*p(int n)

e anche il puntatore restituito nel main deve essere dello stesso tipo


database*x = p(5);

Inoltre queste linee devono essere semplicemente


c[i].x = i;
c[i].y = i +1;