Sto studiando le matrici dinamiche, riscontro una differenza rispetto alle matrici statiche, se dichiaro una matrice statica a due dimensioni e poi uso il suo puntatore, posso esplorare tutti i valori serialmente come fosse un vettore.
La stessa cosa non succede con la matrice a due dimensioni allocata dinamicamente.
Di seguito il codice di test, alloco una matrice dinamica a due dimensioni, la riempio di numeri progressivi con due cicli e la visualizzo regolarmente.
Poi come farei con una matrice statica, inizializzo il suo puntatore e lo utilizzo per visualizzare la matrice serialmente, alla visualizzazione si capisce che le righe della matrice in memoria non sono contigue.
Sbaglio ad allocare la matrice? o quale info mi manca?
#include <stdio.h>
#include <stdlib.h>
#define DIM 6
void visualizza(int **m){
for (int r=0; r<DIM; r++) {
for (int c=0; c<DIM; c++) {
printf("%02d ", m[r][c]);
}
printf("\n");
}
}
int main(){
int **dinamica;
dinamica=(int **)malloc(sizeof(int *)*DIM);
for(int r=0; r<DIM; r++)
dinamica[r]=(int *)malloc(sizeof(int)*DIM);
/* riempio con tabellina dell'uno */
for(int r=0; r<DIM; r++)
for(int c=0; c<DIM; c++)
dinamica[r][c]=(c+1)+r*DIM;
visualizza(dinamica); // visualizzo
int *d=*dinamica; // puntatore all'inizio della matrice
// visualizzo seriale
printf("\n");
for (int i=0; i<DIM*DIM; i++)
printf("%02d ",d[i]);
// dealloco
for (int r=0; r<DIM; r++)
free(dinamica[r]);
free(dinamica);
return 0;
}