No se hai una cosa tipo int **matrice, matrice punta al puntatore *matrice, perché appunto è un puntatore a puntatore quindi scrivere printf("%d\n", *matrice) ti restituirà non il primo elemento della matrice ma - diciamo così - il puntatore alla sua prima riga, ossia il puntatore a cui punta. Se invece scrivi **matrice ti vedi restituito il primo elemento della matrice, perché dereferenzi il puntatore al puntatore.

L'allocazione in memoria delle matrici in C è per righe ma tu puoi scorrerle o per righe o per colonne, dipende da come imposti i cicli iterativi