Hay algo que no he comentado.
Los punteros son como se ha dicho, todo bien.
PERO:
int a[5][5];
int b[10];
NO se guardan en memoria de la misma manera. Esas variables se guardan en la pila, mientras que las variables llamadas con "malloc()" se almacenan en el "heap". Además, la organización de los datos no es el mismo.
Pero bueno, simplemente saber que cuando creas "int a[5][6]" no es igual que "int **a".