De nada.
Aunque ya haciendo un mejor análisis estaba viendo que en la segunda declaracion:
int (*d())[n];
la función retorna un puntero de tipo
int (*p)[n];
(p es un puntero a un arreglo[0...n-1] de tipo int)
esto último quiere decir que si tienes un arreglo
int m[q][n]; //arreglo de dos dimensiones
entonces puedes hacer la siguiente asignación:
p = m;
En pocas palabras esto da pie a decir que a traves de la función puedes obtener acceso a arreglos de dos dimensiones, asi que estaba equivocado al haber dicho que no tenian nada que ver con arreglos de dos dimensiones.
Salu2.