01: // passaggio array monodimensionale a funzione, intercambiabilita' delle modalita' di passaggio
02: #include<stdio.h>
03: #include<stdlib.h>
04: #include<time.h>
05:
06: // 3 possibilita'
07: // 1: dimensioni note a priori (array statico)
08: // 2: VLA
09: // 3: come puntatori a puntatori
10:
11: // LE FUNZIONO SONO IDENTICHE A PRIMA!
12:
13: // DIMENSIONI NOTE A PRIORI
14: // questa funzione stampa solamente il contenuto di un array di dimensioni ben definite
15: // al momento della compilazione
16: #define SIZE 8
17: void stampa(int a[SIZE])
18: {
19: for(int i = 0; i < SIZE; ++i)
20: printf("%d ", a[i]);
21: printf("\n");
22: }
23:
24: // USO VLA
25: // se non conosco le dimensioni a priori allora posso sfruttare
26: // i VLA se il mio compilatore li ammette
27: void stampa_vla(int dim, int a[dim]) // nell'elenco dei parametri l'array DEVE essere DOPO le dimensioni
28: {
29: for(int i = 0; i < dim; ++i)
30: printf("%d ", a[i]);
31: printf("\n");
32: }
33:
34: // PUNTATORI
35: // in maniera piu' generale posso usare
36: // i puntatori
37: void stampa_punct(int *a, int dim) // ma comunque devo passare lo stesso le dimensioni in qualche modo...
38: {
39: for(int i = 0; i < dim; ++i)
40: printf("%d ", a[i]);
41: printf("\n");
42: }
43:
44:
45: int main(int argc, char **argv){
46:
47: srand(time(NULL));
48:
49: int n;
50:
51: printf("Dimmi quanti numeri casuali generare: ");
52: scanf("%d", &n);
53:
54:
55: // alloco con VLA (per semplicita')
56: int numbers[n];
57:
58: // riempo di valori casuali
59: for(int i = 0; i < n; ++i)
60: numbers[i] = rand()%1000;
61:
62: // pur avendo allocato con VLA
63: // di fatto posso passare quell'array ad una qualunque delle funzioni definite
64: // infatti a basso livello qualunque array e' un puntatore, io passo
65: // sempre l'indirizzo di un puntatore
66:
67: printf("\n");
68: stampa(numbers); // unico limite, questa funziona correttamente solo se n>=8 e comunque stampa solo 8 elementi
69:
70: printf("\n");
71: stampa_vla(n, numbers);
72:
73: printf("\n");
74: stampa_punct(numbers, n);
75:
76:
77: return 0;
78: }
79:
80:
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