Tu pregunta me dio curiosidad, especialmente el que nadie supieramos la respuesta a una pregunta que en apariencia suena trivial.
La manera correcta es:
Código:
#include<stdio.h>
#include<conio.h>
void main(){
int m[10][10];
int (*p)[10];
m[4][5] = 123;
p = &m[0];
clrscr();
printf("m[4][5] --> %i\n", m[4][5]);
printf("p[4][5] --> %i\n", p[4][5]);
printf("(*(p+4))[5]--> %i", (*(p+4))[5]);
getch();
}
La respuesta la obtuve en:
-Programacion en C. - Bataller/Magdalena. - Ed. Alfaomega - ISBN: 970-15-0665-0 - P.164,165
Cita: "Hemos de avisar que en la declaracion
int (*P)[10]
Es indispensable especificar la dimension, por que para encontrar la posicion p[4][5] se calcula:
4*10*tamaño de un int
para encontrar la fila, y a esto se le suma
5*tamaño de un int
para encontrar la columna dentro de la fila. Por tanto, para encontrar la fila se necesita conocer su amplitud (cuantas columnas contiene) y eso se dice con la dimension. Esto se debe a la forma en que los arrays se guardan en memoria"....
Espero que aunque fuera de tiempo aún te sirva, o por lo menos resuelva tu duda.