Ok, provo a spiegarti brevemente un po' di aritmetica sui puntatori. Te hai una matrice, ovvero un doppio puntatore ai tuoi dati. Per semplicità ammettiamo una matrice di interi: int ** matrice.
Il primo puntatore rappresenta il valore della colonna, mentre il secondo quello della riga. È possibile accedere al dato in posizione (x, y) semplicemente scrivendo la sintassi matrice[x][y]. Se invece vuoi spostare il puntatore che identifica la matrice nella posizione (x, y) devi effettuare due somme: la prima al puntatore della colonna e la seconda al puntatore della riga. Una volta effettuata la somma il dato in posizione (x, y) te lo ritroverai nella posizione (0, 0). La somma sulla colonna quindi si effettua facendo
matrice += x;
, mentre la somma sulle righe
(*matrice) += y
. Come puoi notare per spostarti di una riga accedi al puntatore relativo alla colonna ed effettui la somma sul secondo puntatore. Dando una breve occhiata al tuo codice la tua matrice è fatta proprio con un doppio puntatore, e quindi questa soluzione dovrebbe funzionarti. Per completezza ti posto un piccolo codice di esempio scritto in c con una matrice 5x5 e la procedura per manipolare i suoi puntatori in modo da stampare tutti i suoi elementi. In pratica ho simulato in piccolo il tuo iteratore.
#include <stdio.h>
#include <stdlib.h>
int main(){
int i, j, c = 0;
int ** m;
/* allocazione matrice */
m = (int **) malloc(sizeof(int) * 5);
for (i = 0; i < 5; i++){
m[i] = (int *) malloc(sizeof(int) * 5);
for (j = 0; j < 5; j++)
m[i][j] = c++;
}
/* scansione matrice */
for (i = 0; i < 5; i++){
for (j = 0; j < 5; j++){
printf("%d ", **m);
(*m)++; /* spostamento sulle righe */
if (j == 4)
printf("\n");
}
m++; /* spostamento sulle colonne */
}
return 0;
}
Intel