fisica:informatica:201718:esercitazioni:esercitazione8
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Prossima revisione | Revisione precedente | ||
fisica:informatica:201718:esercitazioni:esercitazione8 [26/02/2018 alle 12:11 (7 anni fa)] – creata Susanna Pelagatti | fisica:informatica:201718:esercitazioni:esercitazione8 [06/03/2019 alle 13:53 (6 anni fa)] (versione attuale) – [Esercizio 5: Effetti collaterali indesiderati] Susanna Pelagatti | ||
---|---|---|---|
Linea 42: | Linea 42: | ||
Verificare la corretta allocazione e gestire gli errori. | Verificare la corretta allocazione e gestire gli errori. | ||
- | ===== Esercizio 5: Funzione di allocazione/ | + | |
+ | ===== Esercizio 5: Effetti collaterali indesiderati ===== | ||
+ | |||
+ | Se ho una variabile intera "int i", posso modificarne il valore con una funzione che riceve un puntatore "& | ||
+ | |||
+ | Allo stesso modo, se ho un array di interi '' | ||
+ | |||
+ | Le due funzioni '' | ||
+ | Qual' | ||
+ | |||
+ | < | ||
+ | #include < | ||
+ | |||
+ | // questa funzione riceve un puntatore ad un array di interi, ed ha il compito di creare un array in qu | ||
+ | void array1(int ** c); | ||
+ | |||
+ | // questa funzione si comporta come array1 ma crea un array differente | ||
+ | void array2(int ** c); | ||
+ | |||
+ | |||
+ | int main(){ | ||
+ | |||
+ | int * aA; // array A | ||
+ | int * aB; // array B | ||
+ | |||
+ | array1(& | ||
+ | |||
+ | printf(" | ||
+ | |||
+ | array2(& | ||
+ | |||
+ | printf(" | ||
+ | |||
+ | // ma nel frattempo, cosa e' successo all' | ||
+ | printf(" | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | |||
+ | void array1(int ** c){ | ||
+ | |||
+ | int n = 3; | ||
+ | |||
+ | // avendo usato a[n], la dimensione non e' nota a tempo di compilazione | ||
+ | // quindi non possiamo utilizzare la costruzione con valore letterale "a[n] = {1, | ||
+ | int a[n]; | ||
+ | |||
+ | a[0] = 1; | ||
+ | a[1] = 2; | ||
+ | a[2] = 3; | ||
+ | |||
+ | *c = a; | ||
+ | } | ||
+ | |||
+ | void array2(int ** c){ | ||
+ | int n = 3; | ||
+ | int a[n]; | ||
+ | |||
+ | a[0] = 4; | ||
+ | a[1] = 5; | ||
+ | a[2] = 6; | ||
+ | |||
+ | *c = a; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Correggere il codice in modo che le funzioni array1() e array2() allochino i rispettivi array sullo heap con la funzione " | ||
+ | |||
+ | |||
+ | |||
+ | ===== Esercizio 6: Funzione di allocazione/ | ||
Le matrici possono essere rappresentate come array di puntatori a righe. | Le matrici possono essere rappresentate come array di puntatori a righe. |
fisica/informatica/201718/esercitazioni/esercitazione8.1519647099.txt.gz · Ultima modifica: 26/02/2018 alle 12:11 (7 anni fa) da Susanna Pelagatti