01: // allocazione dinamica array bidimensionali usando puntatori a puntatori
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 righe
08:   // una singola riga di una matrice la posso gestire con un array
09:   // tante righe diventano un array di array
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:   // Passo 1: alloco matrix, in pratica un singolo array di puntatori a int
20:   matrix = malloc(nrows*sizeof(int *)); 
21:   // Passo 2: dopo questa riga, ammesso che la malloc() abbia fatto il suo dovere, l'elemento i-esimo matrix[i] è un puntatore ad int
22:   //          li devo inizializzare tutti facendoli puntare a opportuna riga
23:   for(int i = 0; i < nrows; ++i)
24:     matrix[i] = malloc(ncols*sizeof(int));
25: 
26: 
27:   // allocazione finita, adesso posso usarla come un semplice array bidimensionale
28: 
29:   // esempio di scrittura (inizializzo con numeri casuali tra 0 e 99)
30:   for(int r = 0; r < nrows; ++r)
31:     for(int c = 0; c < ncols; ++c)
32:       matrix[r][c] = rand()%100;
33:   
34:   // esempio di lettura (stampa)
35:   for(int r = 0; r < nrows; ++r)
36:   {
37:     for(int c = 0; c < ncols; ++c)
38:       printf("%2d ", matrix[r][c]);
39:     printf("\n");
40:   }
41: 
42:   return 0;
43: }
44: 
45: 


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