Nel caso di una matrice a due dimensioni, come
int mat[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
la scrittura
*mat
rappresenta l'indirizzo della prima riga (che ovviamente corrisponde all'indirizzo del primo elemento). Quindi
*(mat+1)
è l'indirizzo della seconda riga e così via.
Nel caso della matrice precedente, ottieni gli indirizzi delle righe e dei vari elementi per riga
printf("%X %d %d %d\n", *mat, *(*(mat)), *(*(mat)+1), *(*(mat)+2));
printf("%X %d %d %d\n", *(mat+1), *(*(mat+1)), *(*(mat+1)+1), *(*(mat+1)+2));
printf("%X %d %d %d\n", *(mat+2), *(*(mat+2)), *(*(mat+2)+1), *(*(mat+2)+2));