01: // allocazione dinamica array bidimensionali usando un array monodimensionale
02: #include<stdio.h>
03: #include<stdlib.h>
04: 
05: int main(int argc, char **argv){
06: 
07:   // posso vedere una matrice come un insieme di elementi
08:   // posso disaccoppiare ogranizzazione logica e "fisica"
09:   // usando un array monodimensionale
10: 
11: 
12:   // leggo dimensioni da usare
13:   int nrows, ncols;
14:   printf("Inserisci le dimensioni della matrice che vuoi gestire: ");
15:   scanf("%d%d", &nrows, &ncols); 
16: 
17:   int *matrix;  // un puntatore di puntatori permette di gestire un array di array
18: 
19:   // Alloco il numero necessario di byte per gestire nrows*ncols elementi
20:   matrix = malloc(nrows * ncols * sizeof(int));  
21: 
22:   // allocazione finita, pero' per usarla devo convertire
23:   // gli indici di riga e colonna dell'ipotetica matrice nel
24:   // corrispondente indice come se mettessi le righe
25:   // tutte di seguito l'una all'altra. La formula e'
26:   // indice nell'array = <indice di colonna> + <indice di riga> * <numero elementi nella riga>
27: 
28:   // esempio di scrittura (inizializzo con numeri casuali tra 0 e 99)
29:   for(int r = 0; r < nrows; ++r)
30:     for(int c = 0; c < ncols; ++c)
31:       matrix[c + r * ncols] = rand()%100;
32:   
33:   // esempio di lettura (stampa)
34:   for(int r = 0; r < nrows; ++r)
35:   {
36:     for(int c = 0; c < ncols; ++c)
37:       printf("%2d ", matrix[c + r * ncols]);
38:     printf("\n");
39:   }
40: 
41:   return 0;
42: }
43: 
44: 


Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it