Veamos
un ejemplo:
"tabla"
es un puntero que apunta a una variable de tipo puntero a int.
Sabemos
que un puntero se comporta casi igual que un array, por lo tanto
nada nos impide que "tabla" apunte al primer elemento
de un array de punteros:

Ahora
estamos en un caso similar, "tabla" apunta a un array
de punteros a int, cada elemento de este array puede ser a su
vez un puntero al primer elemento de otro array:

Ahora
tabla apunta a un array de dos dimensiones de n * m, podemos acceder
a cada elemento igual que accedemos a los elementos de los arrays
normales:

Antes
de abandonar el programa hay que liberar la memoria dinámica
usada, primero la asociada a cada uno de los punteros de "tabla[i]"
y después la del array de punteros a int, "tabla":

|