01: // passaggio array bidimensionali a funzione
02: #include<stdio.h>
03: #include<stdlib.h>
04: 
05: // 3 possibilita'
06: // 1: dimensioni note a priori
07: // 2: VLA
08: // 3: come puntatori a puntatori
09: 
10: #define SIZE 8
11: 
12: // DIMENSIONI NOITE A PRIORI
13: // questa funzione stampa solamente il contenuto di un array di dimensioni ben definite
14: // al momento della compilazione
15: void stampa(int scacchiera[SIZE][SIZE])
16: {
17:   for(int i = 0; i < SIZE; ++i)
18:   {
19:     for(int j = 0; j < SIZE; ++j)
20:     {
21:       printf("%d", scacchiera[j][i]);
22:     }
23:   printf("\n");
24:   }
25: }
26: 
27: // USO VLA
28: // se non conosco le dimensioni a priori allora posso sfruttare
29: // i VLA se il mio compilatore li ammette
30: void stampa_vla(int righe, int colonne, int scacchiera[righe][colonne]) // nell'elenco dei parametri l'array DEVE essere DOPO le dimensioni
31: {
32:   for(int i = 0; i < colonne; ++i)
33:   {
34:     for(int j = 0; j < righe; ++j)
35:     {
36:       printf("%d", scacchiera[j][i]);
37:     }
38:   printf("\n");
39:   }
40: }
41: 
42: // PUNTATORI 
43: // in maniera piu' generale posso usare
44: // un puntatore
45: // necessario convertire la struttura logica bidimensionale in monodimensionale
46: void stampa_punct(int *scacchiera, int righe, int colonne) // ma comunque devo passare lo stesso le dimensioni in qualche modo...
47: {
48:   for(int i = 0; i < colonne; ++i)
49:   {
50:     for(int j = 0; j < righe; ++j)
51:     {
52:       printf("%d", scacchiera[j*colonne + i]); // la formula mi permette di convertire le due dimensioni riga/colonna nella posizione in memoria
53:     }
54:   printf("\n");
55:   }
56: }
57: 
58: 
59: int main(int argc, char **argv){
60: 
61:   int dim;
62: 
63:   printf("Indica la dimensione della scacchiera (quadrata) che vuoi stampare: ");
64:   scanf("%d", &dim);
65:   
66: 
67:   // alloco con VLA (per semplicita')
68:   int scacchiera[dim][dim];
69: 
70:   // riempo di valori alternati per simulare quadretti
71:   for(int i = 0; i < dim; ++i)
72:     for(int j = 0; j < dim; ++j)
73:       scacchiera[i][j] = (i+j)%2?0:1;
74: 
75:   
76:   printf("\n");
77:   stampa(scacchiera);
78:   
79:   printf("\n");
80:   stampa_vla(dim, dim, scacchiera);
81: 
82:   printf("\n");
83:   stampa_punct((int *)scacchiera, dim, dim); // necessaria conversione esplicita (un array multidimensionale non equivale ad un puntatore)
84:   
85:   
86: 
87: 
88:   return 0;
89: }
90: 
91: 


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