01: // passaggio array monodimensionale a funzione, gestire le dimensioni
02: #include<stdio.h>
03: #include<stdlib.h>
04: #include<time.h>
05:
06: // 3 possibilita'
07: // 1: dimensioni note a priori
08: // 2: VLA
09: // 3: come puntatori ad area allocata dinamicamente
10:
11: #define SIZE 8000
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_stat(int a[SIZE])
16: {
17: for(int i = 0; i < SIZE; ++i)
18: printf("%d ", a[i]);
19: printf("\n");
20: }
21:
22: // USO VLA
23: // se non conosco le dimensioni a priori allora posso sfruttare
24: // i VLA se il mio compilatore li ammette
25:
26: void stampa_vla(int dim, int a[dim]) // nell'elenco dei parametri l'array DEVE essere DOPO le dimensioni
27: {
28: for(int i = 0; i < dim; ++i)
29: printf("%d ", a[i]);
30: printf("\n");
31: }
32:
33: // PUNTATORI
34: // in maniera piu' generale posso usare
35: // i puntatori
36:
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: // definisco array allocato con VLA
56: int numbers_vla[n];
57:
58: // definisco array allocato dinamicamente
59: int *numbers_dyn = malloc(sizeof(int) * n);
60:
61: // definisco array statico (ho esagerato con SIZE di modo che funzioni)
62: int numbers_stat[SIZE];
63:
64:
65: // riempiamoli di valori random
66: for(int i = 0; i < n; ++i)
67: {
68: int caso = rand()%1000;
69:
70: numbers_vla[i] = caso;
71: numbers_dyn[i] = caso;
72: numbers_stat[i] = caso;
73: }
74:
75:
76: printf("\n");
77: // stampa array statico, non passo la dimensione in quanto gia' definito nella funzione
78: stampa_stat(numbers_stat);
79:
80: printf("\n");
81: // stampa VLA, obbligatorio passare anche numero elementi
82: stampa_vla(n, numbers_vla);
83:
84: printf("\n");
85: // stampa array allocato dinamicamente, obbligatorio passare anche numero elementi ma non necessariamente prima dell'array
86: stampa_punct(numbers_dyn, n);
87:
88: // Quindi a seconda del tipo di array devo scegliere come passare i dati?
89: // In realta' assolutamente no come si puo' vedere nell'esercizio seguente
90:
91:
92: return 0;
93: }
94:
95:
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