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 (8 anni fa)] – creata Susanna Pelagatti | fisica:informatica:201718:esercitazioni:esercitazione8 [06/03/2019 alle 13:53 (7 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 (8 anni fa) da Susanna Pelagatti
