Ok, grazie per la risposta.
Ti volevo chiedere un'altra cosa:

quando sono nel main i dati ritornati li vorrei stampare in questa maniera:

printf(" %f %f %f %f\n", p[0][0], p[0][1], p[0][2], p[0][3]);
printf(" %f %f %f %f\n", p[1][0], p[1][1], p[1][2], p[1][3]);
printf(" %f %f %f %f\n", p[2][0], p[2][1], p[2][2], p[2][3]);
printf(" %f %f %f %f\n", p[3][0], p[3][1], p[3][2], p[3][3]);

cioè come se fosse una matrice.
Perchè alla seconda riga sballa tutto, dando dei numeri senza senso?
E invece scrivendo così i dati uno dietro l'altro

printf(" %f .......... %f\n", p[0][0], p[0][1],.........p[3][2], p[3][3]);

non accade?