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
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it