Passaggio parametri puntatore
|
|
- Carmela Mancuso
- 7 anni fa
- Visualizzazioni
Transcript
1 Passaggio parametri puntatore Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi
2 Docenti Metodi Numerici prof. Vittoria Bruni Programmazione prof. Domenico Daniele Bloisi Sito del corso Nota: %7E corrisponde alla tilde ~ Pagina 2
3 Orario delle Lezioni Lunedì Martedì Giovedì Venerdì Aula 15, Via Scarpa 14 Pagina 3
4 Informazioni Generali Ing. Domenico Daniele Bloisi, PhD Dipartimento di Ingegneria Informatica Automatica e Gestionale Via Ariosto 25 (adiacente Piazza Dante, A fermate Manzoni, Vittorio Emanuele, Tram 3 fermata via Labicana) mailto:bloisi@dis.uniroma1.it Pagina 4
5 Ricevimento Martedì DIS via Ariosto 25 Aula docenti adiacente aula A4 Si consiglia di inviare una per conferma e di controllare preventivamente la bacheca degli avvisi Pagina 5
6 Sommario Memoria, indirizzamento e puntatori Tipo void * e conversioni sui puntatori Gestione dinamica della memoria Passaggio dei parametri tramite puntatori Pagina 6
7 Gestione dinamica della memoria Nella Unità 5 è stato presentato il modello di allocazione della memoria tramite stack, che si basa sulle regole di campo d azione (definito staticamente, cioè al momento della compilazione). Attraverso i puntatori, il C++ permette di utilizzare un altro modello di allocazione della memoria, che consente di definire la memoria dinamicamente, cioè al momento dell esecuzione del programma. Questa possibilità risulta particolarmente utile ed importante quando non sono note o prevedibili a priori le dimensioni dei dati in ingresso ad un programma. Pagina 7
8 Operatore new In C++, l allocazione dinamica della memoria avviene attraverso l operatore new, il quale ha come argomento un tipo e restituisce il puntatore ad una locazione di memoria per una variabile di quel tipo. Pagina 8
9 Allocazione di memoria delle variabili puntatore La dichiarazione di una variabile puntatore alloca solo la memoria per il riferimento, non per la variabile puntata. int i,j,k; int *pt_i, *pt_j; // pt_i non allocata pt_j = &j; i = 1; j = 2; k = *pt_i + *pt_j; *pt_i = 10; cout << "i = " << i << endl; cout << "k = " << k << endl; Pagina 9
10 Allocazione di memoria delle variabili puntatore Output i = 1 k = Pagina 10
11 Allocazione di memoria delle variabili puntatore Per allocare memoria dinamicamente si usa l operatore new, al quale va indicato il tipo di dato contenuto nella variabile che sarà creata. Sintassi: variabile puntatore = new ( tipo ); Pagina 11
12 Semantica dell'operatore new Semantica: Viene allocata memoria per una variabile di tipo tipo e il riferimento (cioè l'indirizzo di memoria) viene memorizzato nella variabile puntatore. Esempio: int *pt = new(int); // pt ora punta ad una variabile di tipo int Pagina 12
13 Esempio: allocazione dinamica della memoria int *pt1; // dichiarazione del puntatore ad int pt1 = new(int); // creazione dinamica della variabile int *pt1 = 1; // uso della variabile int allocata //dinamicamente cout << "*pt1 = " << *pt1 << endl; Si noti che per gestire le variabili allocate dinamicamente è necessario utilizzare i puntatori. Pagina 13
14 Modello di allocazione dinamica Se lo spazio di memoria allocabile dinamicamente è esaurito viene restituito il puntatore NULL. int *pt1; // dichiarazione del puntatore ad int pt1 = new(int); // creazione dinamica della variabile int if (pt1 == NULL) { cout << "allocazione fallita" << endl; exit(exit_failure); } Pagina 14
15 Esercizio /*1*/#include <iostream> /*2*/ /*3*/using namespace std; /*4*/ Cosa stampa questo programma? /*5*/int main() { /*6*/ char f = 'b'; /*7*/ char* c = new (char); /*8*/ int *i = new (int); /*9*/ *c = 'a'; /*10*/ *i = -1; /*11*/ cout << (*c > *i) << endl; /*12*/ c = &f; /*13*/ cout << *c << endl; /*14*/} Pagina 15
16 Soluzione Esercizio Output: 1 b Pagina 16
17 Tempo di vita delle variabili allocate dinamicamente Per le variabili allocate dinamicamente il tempo di vita corrisponde al periodo che va dal momento in cui la variabile viene allocata al momento in cui la variabile viene deallocata. Il tempo di vita di una variabile allocata dinamicamente è definito solo al momento dell'esecuzione del programma. Pagina 17
18 Tempo di vita delle variabili allocate dinamicamente Se una variabile allocata dinamicamente non viene deallocata esplicitamente, il suo tempo di vita termina alla terminazione del programma. Può verificarsi il caso in cui una zona di memoria allocata non sia più accessibile, in quanto non ci sono variabili che la riferiscono. Tale zona di memoria rimarrà inutilmente occupata per tutta la durata del programma. Pagina 18
19 Esempio: tempo di vita variabili dinamiche int* creaint (int a) { int* temp = new(int); *temp = a; return temp; } int main () { int* pt2 = creaint(5); cout << "*pt2 = " << *pt2 << endl; } Pagina 19
20 Esecuzione: Tempo di vita variabili dinamiche Il programma precedente stampa *pt2 = 5 poiché la variabile allocata dalla funzione creaint viene restituita al programma principale e rimane accessibile anche al termine della esecuzione della funzione. Le variabili create dinamicamente non rispettano le regole di campo di azione. Pagina 20
21 Esempio: esaurimento della memoria // sciupamemoria int *temp; for (int k = 1; true; k++) { cout << "k = " << k << endl; temp = new (int); } L'esecuzione comporta una richiesta infinita di memoria (la condizione del ciclo è sempre verificata). Pagina 21
22 Esecuzione: esaurimento della memoria L esecuzione produrrà una richiesta infinita di memoria che in C++ comporta (dopo un numero di cicli piuttosto alto) l interruzione dell esecuzione con un messaggio simile al seguente: dynamic(1320) malloc: *** mmap(size= ) failed (error code=12) *** error: can t allocate region Nota: Ad ogni ripetizione del ciclo, la memoria allocata al ciclo precedente risulta inaccessibile. Pagina 22
23 Recupero della memoria garbage collection, che automaticamente recupera la memoria non più utilizzata dal programma; in genere, non disponibile in C++. deallocazione esplicita della memoria tramite l'operatore delete. Pagina 23
24 Deallocazione della memoria Il C++ lascia al programmatore il compito di rilasciare la memoria non più necessaria al programma tramite l operatore delete. Sintassi: delete (variabile puntatore); Pagina 24
25 Operatore delete Semantica: Dealloca (cioè, rende disponibile per usi futuri) la memoria puntata dalla variabile puntatore. Esempio: allocazione della variabile int *pt1; pt1 = new(int); uso della variabile *pt1 = 1; cout << "*pt1 = " << *pt1 << endl; delete(pt1); deallocazione della variabile Pagina 25
26 Problemi di deallocazione della memoria int *pt1; pt1 = new(int); // allocazione della variabile *pt1 = 1; cout << "*pt1 = " << *pt1 << endl; // uso della //variabile delete(pt1); // la locazione di memoria rimane accessibile dopo // delete!!! cout << "after delete" << endl; cout << "*pt1 = " << *pt1 << endl; // la stessa locazione di memoria viene ri-allocata!!! int *pt2 = new(int); cout << "after e-new" << endl; cout << "*pt2 = " << *pt2 << endl; Pagina 26
27 Esecuzioni *pt1 = 1 after delete *pt1 = after e-new *pt2 = *pt1 = 1 after delete *pt1 = after e-new *pt2 = *pt1 = 1 after delete *pt1 = after e-new *pt2 = Pagina 27
28 Discussione: problemi di deallocazione della memoria In questo caso, si può verificare che la memoria rimanga accessibile anche dopo il rilascio ed addirittura che sia ancora immutata (anche se non è garantito). In aggiunta, la riallocazione immediata potrebbe riallocare la variabile nella stessa posizione della memoria e quindi con lo stesso valore (ma anche questo non è garantito). In ogni caso, entrambe le situazioni sopra delineate sono da evitare accuratamente, in quanto fonti di errori e di comportamenti instabili del programma. Pagina 28
29 Puntatori appesi Si consideri il seguente frammento di codice int *pt1; pt1 = new(int); //allocazione della variabile *pt1 = 1; int *pt2; pt2 = pt1; cout << "*pt2 = " << *pt2 << endl; delete(pt1); cout << "*pt2 = " << *pt2 << endl; Pagina 29
30 Esecuzione: Puntatori appesi *pt2 = 1 *pt2 = In questo caso, il rilascio della memoria puntata dalla variabile pt1 lascia la variabile pt2 puntare ad una locazione di memoria rilasciata e quindi suscettibile di modifiche arbitrarie da parte del sistema operativo. Questa situazione di puntatore appeso (dangling) è da evitare assolutamente in quanto fonte di errori difficili da individuare. Pagina 30
31 Passaggio di parametri L uso di variabili di tipo puntatore consente di simulare la modalità di passaggio dei parametri per riferimento. Nel passaggio di parametri per valore, in genere utilizzato per i dati di tipo primitivo, il parametro formale può essere considerato come una variabile locale che viene inizializzata al momento della chiamata della funzione con il valore corrispondente al parametro attuale. Pagina 31
32 Passaggio di parametri Il passaggio di parametro per valore effettuato con il tipo puntatore consente di aggirare una proprietà cruciale del passaggio di parametri per valore, cioè la garanzia che la funzione non abbia effetti sul programma chiamante (ad eccezione della restituzione del valore calcolato). Pagina 32
33 Esempio: passaggio parametri puntatore void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } Pagina 33
34 Esempio: passaggio parametri puntatore int main (){ int j,i; i = 12; j = 27; cout << "i = " << i << endl; cout << "j = " << j << endl; swap(&i, &j); cout << "after swap" << endl; cout << "i = " << i << endl; cout << "j = " << j << endl; } Pagina 34
35 Esecuzione i = 12 j = 27 after swap i = 27 j = 12 Pagina 35
36 Nonostante il passaggio di parametri sia per valore, il risultato dell esecuzione della funzione swap consiste proprio nel modificare il valore di due variabili del programma principale. Passando alla funzione i puntatori a due variabili è possibile modificare il valore delle variabili puntate, anche se il valore delle variabili puntatore rimane inalterato. L uso dei puntatori nel passaggio di parametri per valore consente di effettuare in pratica il passaggio di parametri per riferimento. Pagina 36
37 Passaggio per valore VS passaggio tramite puntatori void swap(int *a, int *b) { int temp; temp = *a; *a = *b; definizione *b = temp; } void swapval(int a, int b) { int temp; temp = a; a = b; definizione b = temp; } swap(&x, &y); invocazione swapval(x, y); invocazione Cosa succede se si invoca swapval(&x, &y);? error: invalid conversion from 'int*' to 'int' Pagina 37
38 Chiamata tramite parametri puntatore (per indirizzo): funzione chiamante Quando la funzione viene chiamata, devono essere passati come parametri gli indirizzi delle variabili il passaggio degli indirizzi potrà essere ottenuto applicando l operatore di indirizzo & alla variabile che deve essere modificata sono passate le celle fisiche dove i valori sono memorizzati &a a b &b 2 3 int a; int b; a = 2; b = 3; f(&a, &b); Pagina 38
39 Chiamata per indirizzo Nell intestazione della funzione chiamata deve essere usato l operatore di deriferimento per le variabili passate per indirizzo pa pb &pa &a &pb &b void f(int *pa, int *pb) { *pa = 6; *pb = 7; } Pagina 39
40 Chiamata per indirizzo: esecuzione a &a 6 int a; int b; a = 2; b = 3; f(&a, &b); pa &pa b &b 7 int *pa = &a; pb &pb void f(int *pa, int *pb) { *pa = 6; *pb = 7; } Pagina 40
41 Passaggio per riferimento VS passaggio tramite puntatori void swap(int *a, int *b) { int temp; temp = *a; *a = *b; definizione *b = temp; } void swapref(int &a, int &b) { int temp; temp = a; a = b; definizione b = temp; } swap(&x, &y); invocazione swapref(x, y); invocazione Cosa succede se si invoca swapref(&x, &y);? error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int*' Pagina 41
42 Vantaggi del passaggio tramite puntatori VS passaggio per valore Il passaggio di parametri di tipo puntatore è particolarmente utile quando i dati che devono essere scambiati tra funzione chiamata e programma chiamante sono voluminosi. Il passaggio tramite puntatori risulta molto più efficiente sia in termini di occupazione di memoria che di tempo di calcolo (infatti, occorre la copia del solo puntatore ai dati, non di tutto l insieme dei dati). Pagina 42
43 Vantaggi del passaggio per riferimento VS passaggio tramite puntatori Evidentemente l uso dei puntatori nel passaggio di parametri per valore consente di effettuare in pratica il passaggio di parametri per riferimento. Quest ultimo, risulta, tuttavia, più chiaro e non richiede la manipolazione esplicita dei puntatori nel parametro attuale. Pagina 43
44 Parametri per riferimento costanti Quando il parametro passato per riferimento non deve essere modificato dalla funzione, si può utilizzare lo specificatore const void f (const double &x) { x=2.0; //Errore: x non può essere modificato return; } Pagina 44
45 Esempio #include <iostream> #include <cstdlib> using namespace std; void f (const double &x) { x=2.0; // Errore: x non può // essere modificato return; } int main () { double d; reference 'x' d = 1; f(d); cout << "d = " << d << endl; return EXIT_SUCCESS; } In function 'void f(const double&)': error: assignment of read-only Pagina 45
46 Valori restituiti di tipo puntatore e riferimento Le funzioni C++ possono restituire valori di tipo puntatore o di tipo riferimento. Pagina 46
47 Valori restituiti di tipo puntatore double *puntatore (double a) { double *r = new (double); *r = a; return r; } la funzione puntatore crea un puntatore ad una variabile di tipo double e la inizializza con il valore passato come argomento int main () { double *pd = puntatore(5.4); cout << "pd = " << pd << endl; cout << "*pd = " << *pd << endl; return EXIT_SUCCESS; } Pagina 47
48 Valori restituiti di tipo riferimento double &ref (double &a) { return a; } int main () { double d1,d2; d1 = 1; ref(d2) = d1; cout << "d2 = " << d2 << endl; return EXIT_SUCCESS; } Pagina 48
49 Variabili riferimento In C++ lo stesso meccanismo che si usa nel passaggio di parametro per riferimento per far in modo che due variabili facciano riferimento alla stessa locazione di memoria, si può utilizzare anche tra due variabili. int x; int &y = x; Da questo punto in poi le due variabili x ed y fanno riferimento alla stessa locazione di memoria. Pagina 49
50 Appendice: memoria 0 Memoria La memoria del calcolatore può essere idealmente descritta come un insieme di celle ORDINATO UNIVOCAMENTE n Pagina 50
51 Appendice: assegnazione 0 int x = 1; n 1 x L istruzione di assegnazione permette di scrivere un valore all interno di una cella simboleggiata da un nome di variabile Pagina 51
52 Appendice: valore di una variabile 0 int x = 1; cout << "x = " << x; Produce x x = 1 n Tramite il nome di una variabile è possibile leggere il contenuto della cella simboleggiata da quella variabile Pagina 52
53 Appendice: indirizzo di una variabile 0 int x = 1; cout << "&x = " << &x; Produce x &x = n Tramite l operatore & applicato al nome di una variabile è possibile leggere l indirizzo della cella simboleggiata da quella variabile Pagina 53
54 Appendice: puntatore n x_ptr x int x = 1; int *x_ptr; x_ptr = &x; cout << "*x_ptr = " << *x_ptr << endl; cout << "&x_ptr = " << &x_ptr << endl; cout << "x_ptr = " << x_ptr << endl; Produce *x_ptr = 1 &x_ptr = x_ptr = Pagina 54
55 Appendice: valore tramite un puntatore x_ptr x Tramite l operatore * applicato al nome di un puntatore è possibile leggere il contenuto della cella il cui indirizzo è contenuto nella cella simboleggiata da quel puntatore n Pagina 55
Passaggio parametri puntatore Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliPassaggio parametri puntatore
Passaggio parametri puntatore Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale
DettagliIntroduzione al C. Unità Gestione Dinamica della Memoria
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità Gestione Dinamica della Memoria D. Bloisi, A. Pennisi, S. Peluso, S. Salza Gestione
DettagliFunzioni. Unità 1. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliVariabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliPuntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliPuntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliEsercizi Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliEsercizi Array Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliArray. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliUniversità degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria
di Cassino e del Lazio Meridionale Corso di Informatica Allocazione dinamica di memoria Anno Accademico 2015/2016 Francesco Tortorella Allocazione dinamica di memoria Finora abbiamo considerato variabili
DettagliGestione della memoria
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliCorso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica
Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare
DettagliTipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliOperazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Il tipo puntatore; l allocazione dinamica della memoria Claudio De Stefano - Corso di Fondamenti di Informatica 1 puntatori una variabile di tipo puntatore al tipo x
DettagliOperatore di indirizzo
Operatore di indirizzo L operatore unario di indirizzo & restituisce l indirizzo della locazione di memoria dell operando Il valore restituito non va usato come l- value (in quanto l indirizzo di memoria
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
Dettagli! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente
! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili
DettagliLa gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
DettagliAllocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
DettagliEsercizio 2: Algebra dei Puntatori e Puntatori a Puntatori
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso
DettagliAllocazione statica della memoria
2015 - Roberta Gerboni 1 2 Allocazione statica della memoria Cosa succede nella memoria del computer quando il un programma vengono dichiarate delle variabili? memoria Ad esempio: int main() 57 { int x=
DettagliProgrammazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliLaboratorio di Informatica
Cosa sono i puntatori? I puntatori sono fondamentalmente delle variabili che non contengono un valore numerico o alfanumerico, ma un puntatore (ossia un indirizzo) alla locazione di memoria dove è memorizzato
DettagliStringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliL'allocazione dinamica della memoria
L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria
DettagliAllocazione dinamica
Allocazione dinamica Quando non si sa a priori quanto un array debba essere grande allocazione dinamica di array Quando si deve restituire un array come risultato di una funzione (a meno di non barare
DettagliIstruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliProgrammazione (imperativa)
Programmazione (imperativa) Corso di Laurea in Informatica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Lunedì 12.00-13.00 e 14.00-16.00 Mercoledì 14.00-17.00 Laboratorio: Giovedì 12.00-13.00
DettagliLa Gestione della Memoria. Carla Binucci e Walter Didimo
La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina
DettagliUnità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
DettagliIl C nel C++: Funzioni
Il C nel C++: Funzioni Funzioni (1) il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma
DettagliIstruzioni di ciclo. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliAllocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()
Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
DettagliLinguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
DettagliStrutture Dinamiche. Fondamenti di Informatica
Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));
DettagliFondamenti di Informatica T. Linguaggio C: i puntatori
Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme
DettagliVerso i puntatori: Cosa è una variabile?
Verso i puntatori: Cosa è una variabile? Quando si dichiara una variabile, ad es. int a; si rende noto il nome e il tipo della variabile. Il compilatore alloca l opportuno numero di byte di memoria per
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliHeader. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale
DettagliDefinizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
DettagliParametri Formali di una Funzione e Record di Attivazione
Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali
DettagliOttenere una modifica del parametro attuale
Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)
DettagliSommario. Le differenze fra C e C++ Funzioni. Varie. Memoria. commenti. parametri per funzioni funzioni inline overloading di funzione
Introduzione al C++ Sommario Le differenze fra C e C++ commenti Funzioni parametri per funzioni funzioni inline overloading di funzione Varie input/output nuovi header punto di dichiarazione delle variabili
DettagliCompendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)
Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione
DettagliIl paradigma OO e le Classi
Oggetti e Classi (CAP 10) Alberto Garfagnini Università degli studi di Padova 1 Dicembre 2009 Il paradigma OO e le Classi La programmazione ad Oggetti () è una filosofia di programmazione che si basa sui
DettagliPuntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a
Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime
Dettaglinome (lista_parametri) Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti
Università di Roma Tor Vergata L9-1 Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti utilizzare il valore restituito quanti argomenti
DettagliCorso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Costruttori di copia, funzioni di accesso e variabili static aa 2008/2009 Claudio De Stefano Claudio De Stefano - Corso di Programmazione ad Oggetti - aa 2008/2009 1
DettagliIl puntatore. Il puntatore
Il puntatore È un tipo scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Il dominio di una variabile di tipo puntatore è un insieme di indirizzi: Il valore di una
DettagliAllocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Lorenzo Dusty Costa Federico Paolo Kircheis 30 Novembre 2011 1 Introduzione alle memoria dinamica Uno degli inconvenienti che spesso si incontrano nell'uso degli array
DettagliTempo di vita e scope delle variabili
Tempo di vita e scope delle variabili Richiami sulla struttura di un programma C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume tutto in un unico file):
DettagliINTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
DettagliUso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
DettagliAllocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica
Allocazione dinamica della memoria Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Allocazione della memoria Il termine allocazione viene utilizzato per indicare l assegnazione di un blocco
DettagliPerché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
DettagliCorso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Puntatori a funzioni 1 Funzioni che restituiscono puntatori Il valore di ritorno restituito da una funzione può essere di qualsiasi tipo, compreso il tipo puntatore.
DettagliPuntatori (in C) Emilio Di Giacomo
Puntatori (in C) Emilio Di Giacomo Puntatori In questa lezione parleremo di uno dei costrutti più potenti del C: i puntatori I puntatori vengono utilizzati per realizzare il passaggio di parametri per
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
DettagliLa classe std::vector della Standard Template Library del C++
La classe std::vector della Standard Template Library del C++ Alberto Garfagnini Università degli studi di Padova 23 Ottobre 2013 Programmazione generica in C++ : i Template I templates sono probabilmente
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Visibilità e tempo di vita delle variabili
Corso di Fondamenti di Informatica Visibilità e tempo di vita delle variabili Anno Accademico Francesco Tortorella Il concetto di visibilità Un programma C++ può assumere una struttura complessa grazie
DettagliProgrammazione modulare
Programmiamo in.. Programmazione modulare Un programma complesso si suddivide in più sottoprogrammi o funzioni. Un programma suddiviso in piccoli pezzi, è più semplice da gestire da aggiornare da correggere
DettagliI puntatori (richiamo)
I puntatori (richiamo) Puntatori Un puntatore è una variabile che assume come valore un indirizzo in memoria L uso dei puntatori permette di: mantenere riferimenti ad altre variabili (è un punto di accesso
DettagliScope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano
Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di
DettagliLinguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
DettagliIntroduzione ai puntatori in C Definizione
Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il
DettagliTipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.
Array di Tipi di dato utente Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Array di Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione
DettagliArgomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
DettagliInformatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
DettagliPuntatori in C Lucidi della Pof.ssa Pazienza
Puntatori in C Lucidi della Pof.ssa Pazienza http://www.uniroma2.it/didattica/foi2/ Puntatori L operatore di indirizzo & Indirizzi, puntatori Aritmetica dei puntatori L operatore di dereferenziazione *
DettagliDefinizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
DettagliLinguaggio C I puntatori
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C I puntatori 2001 Pier Luca Montessoro - Davide Pierattoni
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)
DettagliLe operazioni di allocazione e deallocazione sono a carico del sistema.
Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione
DettagliFunzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
DettagliInside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays
Pointers: Puntatori (I) Le variabili finora incontrate sono caratterizzate da un nome (o identificativo), un tipo, ed occupano un area di memoria di dimensione dipendente dal tipo. Per accedere ad una
DettagliTipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliIl linguaggio C. Puntatori e Array
Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si
DettagliI puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
DettagliFondamenti di Informatica
Passaggio di parametri in C++ Il passaggio dei parametri tra funzione chiamante e funzione chiamata in C++ avviene secondo due modalità: Fondamenti di Informatica 16. Funzioni in C++ (parte 2) per valore
Dettagli7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
DettagliLa programmazione ad oggetti (OOP)
Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente
DettagliPuntatori. Fondamenti di Programmazione
Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale
DettagliINFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan
INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg borg@unive.it Ricevimento lunedì, prima o dopo lezione 1 Le funzioni in C Le funzioni vengono utilizzate per 3 motivi: Riusabilità
DettagliI PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese
I PUNTATORI E LE STRUTTURE DATI DINAMICHE Cosimo Laneve/Ivan Lanese argomenti 1. dichiarazioni di puntatori 2. le operazione su puntatori (NULL, new, delete, &, *) 3. puntatori passati come parametri e
DettagliLinguaggio C: puntatori
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: puntatori La presente dispensa e da utilizzarsi ai soli fini didattici previa
DettagliAllocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
DettagliThread. Introduzione Creazione, distruzione Sincronizzazione
Thread Introduzione Creazione, distruzione Sincronizzazione Parallelismo Il tipo di meccanismo a supporto del parallelismo dipende dal grado di cooperazione tra le varie entità che costituiscono un'applicazione
DettagliLezione 4. Costruttori
Lezione 4 Costruttori e distruttori Costruttori Quando si crea un oggetto di una classe è possibile inizializzarne i membri tramite il costruttore di classe Il costruttore è una funzione membro che ha
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
Dettagli