En gros le pointeur doit pointer sur un autre pointeur. Dans le cas d'un tableau 2d par exemple, tu ferais :
int **p;
- p représenterai chaque ligne, et **p les collones. Et ainsi de suite si tu as plusieurs dimensions.
Le but en fait est d'initialiser chaque pointeur, pour avoir accès à la dimension suivante.
Le type après dépends de ce que tu veux, tu peux au pire faire void **p pour pointer sur tout type.
Je crois que tu devrais créer une struct, pour mémoriser le nombre de dimensions, et les pointeurs. Parce qu'il faut aussi libérer la mémoire...