Salve a tutti nel codice c che vi mostro creo una struttura e alloco gli elementi della struttura dinamicamente in una funzione. A questa funzione passo una l'array p di tipo Prodotto che ho definito nel main con taglia prefissata. Ora vorrei sapere se è possibile rendere questo array di taglia prefissata, dinamico. Credo si possa fare, ma non ne ho idea 
codice:
#include <stdlib.h>
#include <stdio.h>
#define MAXN 20
typedef struct Prodotto{
char *id_prodotto;
char *nome;
float *prezzo;
}Prodotto;
int inserimento(Prodotto p[]);
void stampa(Prodotto p[], int nprodotti);
int main(){
Prodotto p[MAXN];
int nprodotti;
nprodotti = inserimento(p);
int inserimento(Prodotto p[]){
int nprodotti;
int i = 0;
char buffer[MAXN];
float b;
printf("Quanti nuovi prodotti vuoi inserire?\n");
scanf("%d", &nprodotti);
while(i<nprodotti){
printf("\nId prodotto: ");
scanf("%s", buffer);
p[i].id_prodotto = calloc(strlen(buffer)+1, sizeof(char));
strcpy(p[i].id_prodotto, buffer);
printf("\nNome: ");
scanf("%s", buffer);
p[i].nome = calloc(strlen(buffer)+1, sizeof(char));
strcpy(p[i].nome, buffer);
printf("\nPrezzo: ");
scanf("%f", &b);
p[i].prezzo = calloc(1, sizeof(float));
*p[i].prezzo = b;
i++;
}
return nprodotti;
}
void stampa(Prodotto p[], int nprodotti){
int i = 0;
while(i<nprodotti){
printf("Id_prodotto: %s\n", p[i].id_prodotto);
printf("Nome: %s\n", p[i].nome);
printf("Prezzo: %f \n", *p[i].prezzo);
i++;
}
}
}