void ordine(struct prodotto*p);
void carica(struct prodotto*p);
metti struct prodotto *p, cioè lascia uno spazio, e fallo anche sotto nella definizione delle funzioni(cioè dove c'è il loro codice)



Nel main
carica(&magazzino);
magazzino è un array, quindi è già un puntatore a prodotto; quindi la tua chiamata deve diventare
codice:
carica(magazzino);
in carica(struct prodotto *p)
for(i=0;i<dim;i++)
dim non è dichiarato, non è inizializzato, non esiste!
dovrai chiedere all'utente quanti prodotti vuole inserire e assegnarli a dim.

Questi errori mi sono saltati all'occhio. Se potessi mandare l'elenco errori del compilatore faresti un piacere.