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