Nella prima funzione devi passare dim per puntatore, accettare il valore in modo che non sia maggiore del massimo previsto nel main e poi passare dim a tutte le altre funzioni (non un numero).
Ho provato come hai detto tu, ma non ci sono riuscito. Forse mi sarà sfuggito qualcosa.
Però ho risolto utilizzando typdef!