Tenemos creado en memoria (con malloc) esté array dinámico cuyos elementos son de tipo enteros:
El proceso de creación ha sido... asignamos memoria para un vector de punteros a enteros... algo así como:
-   
- int **pam = (int **)malloc(2 * sizeof(int *)); 
-   
-   
y luego asignamos memoria para cada fila del array:
-   
- for (i = 0; i < 2; i++) { 
-     pam[i] = (int *)malloc(2 * sizeof(int)); 
-   
-   
también hay una variable tipo estructura cuya definición es:
-   
- typedef struct matriz 
- { 
-     int filas; 
-     int columnas; 
-     int **pmatriz; 
- }tmatriz; 
- tmatriz var1; 
-   
-   
esta estructura tiene los datos de la matriz dinámica que se ha creado. 
si tenemos un puntero que apunta a var1...
podemos saber las filas del array haciendo por ejemplo...
-   
- printf("%d", pvar1->filas)); 
-   
- pvar1->pmatriz apuntaría a pam 
-   
-   
Entonces, si quiero leer datos de la matriz podría hacer un bucle así:
-   
- for( i = 0; i < pvar1->filas; i++) { 
-     for(j = 0; j < pvar1->columnas; j++) { 
-         printf("%d", pvar1->pmatriz[i][j]); 
-          
-   
Pero si quiero introducir datos nuevos en mi matriz dinamica, a la hora de leer con:   
-  scanf("%d", pvar1->&matriz[i][j]); 
-   
El compilador se queja 
 
 lo que he hecho es declarar una nueva variable de tipo puntero a puntero a entero y que
 contenga la dirección de memoria de pvar1->pmatriz, y luego meter los datos usando esa nueva variable
 evitando tener que usar la notación con la estructura. Es decir, algo así: 
-   
-  int **pmat2 = pvar1->pmatriz; 
-   
-   
 y Luego ya puedo hacer esto  
- scanf("%d", &pmat2[i][j]); 
-   
 Mi duda es como hacerlo de la primera forma, es decir así: 
- scanf("%d", pvar1->&matriz[i][j]); 
-   
 pero correctamente claro xD 
 Perdón por el rollo; espero que se entienda algo jaja 
 Gracias anticipadas!