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;