Salve Oregon, 
Innanzitutto, ti ringrazio molto per la risposta.
Sto svolgendo un esercizio (senza soluzione), perché come ho detto sono alle prime armi con il C, e l'indicazione dello stesso non specifica quale metodo usare, quindi sono voluto rimanere nel più “semplice” e generale possibile, ma magari anche un tuo consiglio su quale preferire mi farebbe molto comodo. 
Per chiare la parte dell'esercizio che mi interessa e in cui ho problemi chiede la seguente cosa: “Definire la funzione imposta_persona() che chiede di inserire da tastiera il numero di persone, che può variare da minimo 1 a massimo 4. Ogni persona è rappresentata da una struct Persona, che viene creta in memoria dinamica. L’insieme delle persone è rappresentato da un array di 4 Struct Persone* (NULL se la persona è assente). Inoltre, il nome viene inserito da tastiera e l'eta è fissa a 20 anni per tutte le persone.”
Dovendo svolgere l'esercizio seguendo il principio di programmazione modulare la funzione imposta_persona() è definita in un modulo e la struttura in un'altro che è incluso. 
Io come scritto da te nella funzione imposta_persona ho utilizzato un vettore statico e questo è come ho strutturato il modulo relativo alla funzione imposta_persona():
#include "persona.h"
static void crea_persona(struct Persona *personaPtr[], int i);
unsigned short num_persone = 0;
int c = 0; 
struct Persona* persone[4];
void imposta_persona(){
	
	do {
	printf("\nInserire il numero di persone (da un minimo di 1 a un massimo di 4):\n\n");
	scanf(%hu, &num_persone);	
	while((c = getchar()) != '\n' && != EOF);
	
	for(int i = 0; i < num_persone; i++){
		persone[i] = (struct Persona*) malloc(sizeof(struct Persona));
	}
	
	switch(num_persone){
		case 1:
		crea_persona(persone[0], 0);
		persone[1] = NULL; 
		persone[2] = NULL;
		persone[3] = NULL; 
		break;
		
		case 2:
		crea_persona(persone[0], 0);
		crea_persona(persone[1], 1);
		persone[2] = NULL;
		persone[3] = NULL; 
		break;
		
		case 3:
		crea_persona(persone[0], 0);
		crea_persona(persone[1], 1);
		crea_persona(persone[2], 2);
		persone[3] = NULL; 
		break;
		
		case 4:
		crea_persona(persone[0], 0);
		crea_persona(persone[1], 1);
		crea_persona(persone[2], 2);
		crea_persona(persone[3], 3);
		break;
		
		default:
		printf("Numero di persone non valido);
	    }
	} while(num_persone < 1 || num_persone > 4);
}
static void crea_persona(struct Persona *personaPtr[], int i){
	personaPtr -> eta = 20;
}
La definizione della struttura è la seguente:
struct Persona {
	char nome_persona[40];
	int eta;
};
Bene, a questo punto compilando il programma e aggiungendo anche i flag -std =c11 -Wall mi ritorna il seguente errore: “error: ‘*personePtr’ is a pointer; did you mean to use ‘->’?” 
E vorrei capire quale fosse il problema visto che l'operatore ? l'ho utilizzato. 
P.S. ho tralasciato la parte del nome della persona inserito da tastiera, perchè tanto il problema persiste e perché in particolare mi interessa e mi resta difficile capire come posso definire un array di 4 Struct Persone*.