Fondamenti di Informatica II 10. Puntatori e gestione della memoria

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Fondamenti di Informatica II 10. Puntatori e gestione della memoria"

Transcript

1 Cosa sono i puntatori? Fondamenti di Informatica II 10. Puntatori e gestione della memoria 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 un certo valore (intero, reale o carattere) La definizione di una variabile puntatore avviene nello stesso modo con cui si definisce una variabile, eccetto che dobbiamo aggiungere un asterisco tra il tipo e l indentificatore del puntatore (ossia il nome della variabile puntatore) nel nome conviene indicare una p iniziale per ricordarci che è un puntatore Esempi: Corso di Laurea in Ingegneria Informatica A.A Semestre Corso (A-M) int* pone; short* pnum; Persona* pdip; double** ptot; // puntatore ad un int // puntatore ad uno short int // puntatore ad un tipo Persona (p.e. struct) // puntatore ad un puntatore a double Prof. Giovanni Pascoschi 2 Uso dei puntatori Esempio Esempio int* pone; int* ptwo; int num1, num2; pone = &num1; ptwo = &num2; L operatore & deve essere letto come l indirizzo di (Address-of) e restituisce l indirizzo di memoria della variabile e non la variabile. L operatore * deve essere letto come il contenuto della locazione di memoria puntata da a meno che non si trovi in una definizione di variabili puntatore del tipo 'int* pone. L operatore * prende il nome di operatore di dereference (deferenziamento). #include <iostream> using namespace std; int nnumber; int* ppointer; int main() { nnumber = 15; ppointer = &nnumber; // stampiamo il valore di nnumber cout<< "nnumber is equal to : <<nnumber<<endl; // ora, alteriamo nnumber per mezzo di ppointer *ppointer = 25; // stampiamo il nuovo valore di nnumber cout<<"nnumber is equal to: <<nnumber<<endl; return 0; 3 4

2 Puntatori : cosa succede nella memoria Cosa succede nella memoria #include <iostream> using namespace std; Le definizioni int n=7 e int* pnum, determinano la presenza di due locazioni di memoria allocate nell area dati int n=7; int* pnum; n 8A00 8A01 7 pnum = &n; *pnum = 13; return 0; pnum 8A02 8A03 Si suppone che il tipo int richieda 2 bytes di memoria ed assumendo che un puntatore occupi anch esso 2 bytes. la figura sono anche indicati gli indirizzi (in esadecimale) di ciascun byte. L indirizzo di n è per definizione l indirizzo del primo byte, cioè 8A00. L indirizzo di pnum è 8A Cosa succede nella memoria Esempio Le istruzioni: p=&n; *p=13; hanno il seguente effetto in memoria: #include <iostream> using namespace std; int x = - 5, y = 10; int* p; n pnum 8A00 8A01 8A A00 intmain( ){ p = &y; x = *p; return 0; // equivale all istruzione x = y 8A03 7 8

3 Esempio Esempio x 8A00 8A01-5 Le istruzioni: p = &y; x = *p; hanno il seguente effetto in memoria y 8A02 8A03 10 x 8A00 8A01 10 p 8A04 8A05 y 8A02 8A03 10 p 8A04 8A05 8A Puntatori : casi particolari Uso dei puntatori : compatibilità di tipo tra puntatori float* uno, due; float* uno, float* due; int Intero = 10; // dichiarazione due puntatori a float? NO // dichiarazione due puntatori a float? SI Un puntatore a un tipo T può contenere solo indirizzi di variabili di tipo T. Quindi, tipi di puntatori diversi sono incompatibili fra loro NO CASTING Esempi int x = 10; float * py; py = &x; // non si puo fare // const int* Puntatore = &Intero; //dichiarazione puntatore costante a intero? NO int x = 10,int * py; float* pz; int* const CostantePuntatore = &Intero; /* dichiarazione puntatore costante a intero? SI */ py = &x; pz = py; // non si puo fare // const int* const CostantePuntatoreACostante = &Intero; /* dichiarazione puntatore costante a costante di tipo intero */ void* PuntatoreGenerico /*dichiarazione puntatore generico puo puntare a un qualsiasi tipo */ MOTIVO:l informazione sul tipo del puntatore serve a dedurre il tipo dell oggetto puntato, che è indispensabile per effettuare correttamente il dereferenziamento 11 12

4 Esempio : operazioni sui puntatori Uso dei puntatori : operazioni con i puntatori #include <iostream> using namespace std; int a=4, b=15; int* pnum; pnum=&a; (*pnum)++; // incrementa a (parentesi necessarie) // pnum = &b; (*pnum)- -; // decrementa b cout<<a<<endl; // stampa 5 cout<<b<<endl; // stampa 14 return 0; Se P è un puntatore, ed n è un int (eventualmente anche negativo) cosa significa un espressione come : P+n??? Denota un altro puntatore, che punta n locazioni dopo la locazione puntata da P ( locazioni non byte!) Per locazione si intende l insieme di byte necessari a memorizzare una variabile di un certo tipo (provare a utilizzare p.e. sizeof(float) ) Se int richiede 2 (o 4) byte 1 locazione = 2 bytes Se float richiede 4 byte 1 locazione = 4 bytes Se double richiede 8 byte 1 locazione = 8 bytes Uso dei puntatori : operazioni con i puntatori Uso dei puntatori : inizializzazione dei puntatori Se n è negativo, la locazione denotata da P+n precede in realtà quella puntata da P Analogamente, se P e Q sono due puntatori allo stesso tipo T, l espressione P-Q denota il numero (intero) di celle che separano Q da P (eventualmente negativo se Q precede P) NOTA: operazioni tra variabili puntatori a tipi diversi (P puntatore a tipo int, Q puntatore a tipo float), come P+Q, sono illegali E buona regola non lasciare indefiniti i puntatori, per cui è bene inizializzarli subito dopo il momento in cui vengono dichiarati Esempio int *p; p=0; oppure p=null; NULL è una costante simbolica dichiarata anche nella libreria <iostream> 0 (zero) è l unico valore int che si può assegnare ad un puntatore 15 16

5 Vettori e puntatori Vettori e puntatori Un vettore (array) A è un insieme finito di N variabili dello stesso tipo, ognuna identificata da un indice Un vettore è organizzato come un puntatore costante, inizializzato a puntare un area di memoria opportunamente allocata al momento della dichiarazione Il nome del vettore A rappresenta in realtà l indirizzo iniziale dell area di memoria associata al vettore stesso Le seguenti notazioni sono equivalenti: int vett[10]; int* vett; L operatore [ ], applicato ad un nome di vettore, accede alla i-esima cella del vettore L operatore *, applicato ad un puntatore, accede alla variabile da esso puntata Poiché vett è il puntatore al primo elemento del vettore, vale la relazione: *vett = vett[0]; *(vett+1) = vett[1];.. *(vett+n-1) = vett[n-1]; Vettori e puntatori (aritmetica dei puntatori) Vettori e puntatori : esempio Le relazioni viste per i vettori: *A = A[0] *(A+i) = A[i] sono un applicazione dell aritmetica dei puntatori. A denota il puntatore costante alla cella di memoria che contiene la prima variabile del vettore (A+i) denota un altro puntatore che punta i locazioni dopo la locazione puntata da A *(A+i) denota il contenuto della locazione di memoria che si trova i locazioni dopo la locazione puntata da A int Array[ ] = { 1, 2, 3, 4, 5 ; int* pa = Array; // equivale a pa = &Array[0]; cout << pa[3] << endl; // pa[3] equivale a *(pa+3); pa[4] = 7; // equivalente a *(pa+4) = 7; 19 20

6 Puntatori e stringhe Array di stringhe Una stringa si puo anche definire in maniera analoga al C: char Array[ ] = "Una stringa"; char* pa = Array; cout << Array << " == " << pa << endl; // non è necessario usare *pa cout << Array[5] << " == " << pa[5] << endl; // stampa solo un elemento Un array di stringhe si puo dichiarare in diversi modi: string Array[10]; // array di stringhe (stile C++) char Array [10][20]; // matrice di caratteri char* parr[10]; // array di puntatori a carattere Puntatori a puntatore Puntatori a strutture Un puntatore puo puntare qualunque tipo anche un altro puntatore int A = 10; int* pa = &A; int** ppa = &pa; A = 50; // assegna ad A 50 *pa = 50; // assegna ad A 50 **ppa = 50; // assegna ad A 50 Un puntatore puo puntare qualunque tipo anche una struttura si usa l operatore -> Esempio: struct data { int giorno; string mese; int anno; ; data* pdata; data d; pdata = &d; (*pdata).giorno = 31;//per assegnare al campo giorno della struttura d il valore 31 opp. pdata-> giorno = 31; //per assegnare al campo giorno della struttura d il valore

7 Puntatori a funzione Puntatori a funzione : esempio Un puntatore puo puntare anche all indirizzo del nome di una funzione (in maniera analoga al nome di un array) Esempio: int funz(int); // dichiarazione della funzione int (*pf) (int); /* dichiarazione di pf puntatore a una funzione che restituisce un intero e utilizza un parametro intero*/ pf = &funz; // assegnazione di pf alla funzione funz float (*fp) (int x, int y); fp=&funz;... funz(x,y); // chiamata della funzione (*fp) (x,y); // metodo equivalente di chiamata della funzione float funz(int a, int b) { return a+b; Chiamata di funzione con passaggio di puntatore a funzione Array di Puntatori a funzione void (*funz2) ( ); funz1(funz2);... void funz1 (int (*f) ( )) { b = f(23); // b = 23 * 4 = 92 void funz2 (int a) { return 4 * a; Esempio: float (*fp[5]) (int a); /*array di 5 puntatori a funzione che restituiscono un float e che utilizzano un parametro intero*/ Con i puntatori a funzione si puo realizzare una tabella di puntatori a funzione e chiamare una funzione in base all'indice della tabella. Il codice puo "scegliere" quale funzione chiamare in base ad un valore numerico intero direttamente, senza usare un lungo elenco di if o un enorme switch (e' una possibilita' molto usata dai compilatori stessi) 27 28

8 Confronto reference(riferimenti) e puntatori Confronto reference(riferimenti) e puntatori int b = 5; float f = 0.1; int* pb = &b; int& bref = b; float& ff = f; // si crea un puntatore a intero che punta a b // si crea una variabile alias di b // si crea una variabile alias di f cout << b = " << b << endl; //stampa b = 5 cout << pb = " << pb << endl; // stampa indirizzo di b cout << "Assegnamento a pb..." << endl; *pb = 8; cout << b = " << b << endl; // stampa b = 8 cout << bref = " << bref << endl; // stampa bref = 8 cout << "Assegnamento a b..." << endl; b = 15; // oppure bref = 15; cout << b = " << b << endl; // stampa b = 15 cout << bref = " << bref << endl; // stampa bref = Confronto reference(riferimenti) e puntatori Funzioni con parametri reference(riferimenti) e puntatori 31 dopo l'inizializzazione, un riferimento non puo piu essere associato ad un nuovo oggetto: ogni assegnamento al riferimento si traduce in un assegnamento all'oggetto riferito (sono alias). Un riferimento puo` essere inizializzato anche tramite un puntatore: int a = 5; int* pint = &a; int& aref = *pint; // aref è un alias di a tramite pint 32 il passaggio di parametri per indirizzo puo avenire con due metodi : reference e puntatori // metodo per reference (riferimento) swap (num1, num2); void swap (int& a, int& b) { int comodo; comodo = a; a = b; b = comodo;

9 Funzioni con parametri reference(riferimenti) e puntatori Confronto reference e puntatori // metodo per puntatori swap (&num1, &num2); void swap (int* a, int* b) { int * comodo; *comodo = *a; *a = *b; *b = comodo; Vantaggio reference : nella chiamata di una funzione non c'e` differenza tra passaggio per valore o per riferimento e` possibile cambiare meccanismo senza dover modificare ne` il codice che chiama la funzione ne` il corpo della funzione stessa; il codice è piu leggibile Svantaggio reference : il meccanismo dei reference nasconde all'utente il fatto che si passa un indirizzo e non una copia, e cio` puo` creare grossi problemi in fase di debugging del programma Vantaggio puntatori: i puntatori consentono un maggior controllo sugli accessi (tramite la keyword const per impedire la modifica) e rendono esplicito il modo in cui il parametro viene passato (nel 2. modulo vedremo che in alcuni casi è piu conveniente usare i reference per rendere piu leggibile il codice) Principale utilizzo dei puntatori Gestione della memoria I puntatori sono utilizzati sostanzialmente per quattro scopi: 1. Realizzazione di strutture dati dinamiche (es. liste linkate); dopo 2. Realizzazione di funzioni con effetti laterali sui parametri attuali; 3. Ottimizzare il passaggio di parametri di grosse dimensioni; 4. Rendere possibile il passaggio di parametri di tipo funzione. A ciascun programma utente viene assegnata una porzione di memoria, che è automaticamente divisa in quattro porzioni: area del codice contiene il codice del programma area statica che contiene le variabili globali e statiche Il primo caso e` tipico di applicazioni per le quali non e` noto a priori la quantita` di dati che si andranno a manipolare. Dichiarando un array si pone un limite massimo al numero di oggetti di un certo tipo immediatamente disponibili. Utilizzando i puntatori invece e` possibile realizzare ad esempio una lista il cui numero massimo di elementi non e` definito a priori. (p.e. anagrafe comune bari) area heap disponibile per allocazioni dinamiche area stack contiene i record di attivazione delle funzioni (variabili locali e parametri)

10 Mappa della memoria Gestione della memoria Area Dati Area Programma Area Statica Heap Le dimensioni delle aree Programma e Statica sono fisse e sono decise in fase di compilazione. Tali dimensioni corrispondono al numero di righe in linguaggio macchina del programma e al numero di variabili globali/statiche definite in esso. Le altre due aree (Heap e Stack) non hanno dimensione fissa. Tale dimensione varia nel tempo a seconda dell utilizzo delle due aree. In particolare per quanto riguarda l area Heap, essa crescerà quando verranno allocate variabili dinamiche. La sua dimensione si ridurrà, invece, quando una o più variabili dinamiche verranno deallocate. Stack Area di stack Area Heap L'area di memoria Stack (pila) é caratterizzata dalla proprietà che l'ultimo dato che entra in memoria nella fase di scrittura è il primo ad uscire nella fase di lettura (LIFO = Last In First Out). Appena l esecuzione passa dal programma chiamante a una funzione viene allocato nello Stack un pacchetto di dati (record di attivazione). Il record di attivazione contiene l'indirizzo di rientro nel programma chiamante e la lista degli argomenti passati alla funzione. Esso viene accatastato sopra il pacchetto precedente (quello del programma chiamante) e poi automaticamente rimosso dalla memoria appena l'esecuzione della funzione é terminata. Nella memoria stack vengono memorizzate anche altre informazioni, e precisamente i dati relativi a tutte le variabili automatiche (cioè locali e non statiche) create dalla funzione. Il loro tempo di vita é legato all'esecuzione della funzione proprio perché, quando la funzione termina, l'intera area stack allocata viene rimossa. L area Heap è soggetta a regole di visibilità e tempo di vita completamente diverse da quelle che governano l'area Stack e precisamente: l'area heap non é allocata automaticamente, ma può essere allocata o rimossa solo su esplicita richiesta del programma (allocazione dinamica della memoria); l'area allocata non é identificata da un nome, ma é accessibile esclusivamente tramite la definizione di un puntatore; la sua visibilità é legata a quella della variabile puntatore che contiene il suo indirizzo; il suo tempo di vita coincide con l'intera durata del programma, a meno che non venga esplicitamente deallocata; se il puntatore va in una particolare condizione, denominata out of scope, l'area non é più accessibile, ma continua a occupare memoria inutilmente

11 Gestione dinamica della memoria (operatore new) Gestione dinamica della memoria (operatore new) Operatore new Per allocare in modo dinamico la memoria il C++ mette a disposizione l'operatore new. Questo operatore costruisce uno o più oggetti nell'area heap e ne restituisce l'indirizzo. In caso di errore (memoria non disponibile) restituisce NULL occorre controllare l allocazione dello spazio di memoria. La sintassi dell'operatore new è: new tipo[dimensione] (valore_iniziale) tipo é il tipo dell'oggetto (o degli oggetti) da creare; dimensione é il numero degli oggetti, che vengono sistemati nella memoria heap consecutivamente (come gli elementi di un array); se questo operando é omesso, viene costruito un solo oggetto; se é presente, l'indirizzo restituito da new punta al primo oggetto dell array; valore_iniziale é il valore con cui l'area allocata viene inizializzata (deve essere di un tipo coerente); se é omesso l'area non é inizializzata. N.B.: dei tre operandi dell'istruzione solo il primo è obbligatorio Operatore new (esempi) Operatore new (esempi) Esempi : int* pint = new int; si alloca un oggetto int nell'area heap e si usa il suo indirizzo per inizializzare il puntatore pint int* parr = new int [10]; // allocazione di un array si allocano 10 oggetti int nell'area heap e si usa l'indirizzo del primo oggetto per inizializzare il puntatore parr Esempi : struct persona { int a; string b; ; persona* p_pers; p_pers = new persona[100] + 20; // allocazione di una tabella int* pmat = new int[20][20]; // allocazione di una matrice si alloca una matrice 20x20 di interi nell area heap e si usa l indirizzo del primo oggetto [0][0] per inizializzare il puntatore pmat In tal caso si definisce la struttura persona e si dichiara il puntatore p_pers a questa struttura al puntatore p_pers si assegna l'indirizzo del ventesimo dei cento oggetti di tipo persona, allocati nell'area heap 43 44

12 Gestione dinamica della memoria (operatore delete) Gestione della memoria Per deallocare la memoria dell'area heap in C++ mette a disposizione l'operatore delete Questo operatore non restituisce alcun valore Se l'operando punta a un'area in cui sono stati allocati più oggetti, delete va specificato con una coppia di parentesi quadre (senza la dimensione, che il C++ é in grado di riconoscere automaticamente). La sintassi dell'operatore delete è: delete nome_punt float* parr = new float [100] ; delete [ ] parr; // alloca 100 oggetti float // libera tutta la memoria allocata l'operatore delete non cancella la variabile nome_punt, né altera il suo contenuto: l'unico effetto é di liberare la memoria puntata rendendola disponibile per ulteriori allocazioni int* punt = new int; int a; punt = &a; // alloca un int nell'area heap /*assegna a punt un indirizzo dell'area stack (out of scope), per cui l'oggetto int dell'area heap non é più raggiungibile e deallocabile*/ Allocazione dinamica della memoria Gestione dell overflow di memoria La memoria heap non è infinita se ci si dimentica di usare l operatore delete e si ripete più volte l uso dell operatore new, si può avere out-ofmemory E necessario non lasciare che ciò avvenga deallocando le aree di memoria prima che si perdano i puntatori e diventino inaccessibili (operazione di garbage collection) Per gestire / trappare situazioni di errore di allocazione dinamica (p.e. mancanza di spazio nella memoria heap) set_new_handler( ) funzione che serve a gestire gli errori dell operatore new, la quale ha come parametro un puntatore a funzione. Pertanto quando si allocano degli oggetti con l operatore new, è necessario verificare che il puntatore restituito non è un puntatore nullo (NULL)

13 49 Esempio : Gestione dell overflow di memoria #include <iostream> #include <new> using namespace std; void mem_fault( ); set_new_handler (mem_fault); long dim; int* pmem; int blocco; cout << Quanta memoria? ; cin>> dim; for (blocco = 1; ; blocco++) { pmem = new int(dim); cout<< Alloc. blocco: <<blocco<<endl; void mem_fault( ) { cout<< Fault memoria << endl; exit(1); 50 Riepilogo della lezione Puntatori e gestione della memoria Puntatori Corretto uso dei puntatori (aritmetica dei puntatori) Confronto tra reference e puntatori Gestione della memoria Allocazione dinamica della memoria in C++ Gestione overflow memoria in C++ Fine della lezione Domande? 51

Laboratorio di Informatica

Laboratorio 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

Dettagli

Fondamenti di Informatica

Fondamenti 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

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Strutture di dati Fondamenti di Informatica 11. Linguaggio C - Strutture / Tabelle / Puntatori Strutture /Tabelle Corso di Laurea in Ingegneria Informatica e dell Automazione A.A. 2012-2013 2 Semestre

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Memoria stack ed heap (1) L'area di memoria stack é quella in cui viene allocato un pacchetto di dati non appena l'esecuzione passa dal programma chiamante a una funzione.

Dettagli

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Corso 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

Dettagli

Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo

Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo In C++ è possibile distinguere due aree distinte di memoria: memoria stack e memoria heap E

Dettagli

Corso di Fondamenti di Informatica

Corso 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

Dettagli

Allocazione dinamica della memoria

Allocazione 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

Dettagli

Ogni 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. 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

Dettagli

Prof.Ing.S.Cavalieri Puntatori e Heap in Linguaggio C. Puntatori e Heap

Prof.Ing.S.Cavalieri Puntatori e Heap in Linguaggio C. Puntatori e Heap Puntatori e Heap 1.Cosa Sono i Puntatori? I puntatori sono fondamentalmente delle variabili, come quelle intere, reali e carattere. Tuttavia, l unica differenza consiste nel fatto che essi non contengono

Dettagli

Parte 3. Puntatori. [S. Dalí The temptation of St. Anthony, 1946] - AA. 2015/16 3.1

Parte 3. Puntatori. [S. Dalí The temptation of St. Anthony, 1946] - AA. 2015/16 3.1 Parte 3 Puntatori [S. Dalí The temptation of St. Anthony, 1946] 3.1 3.2 Puntatori Approfondimento rispetto alla trattazione vista nel corso precedente Finora come avete utilizzato i puntatori? Principalmente

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di

Dettagli

Introduzione ai puntatori

Introduzione ai puntatori Introduzione ai puntatori Algoritmicamente November 19, 2009 http://algoritmicamente.wordpress.com/ 1 Concetti fondamentali Nei linguaggi quali C, C++, il concetto e l'uso dei puntatori è estremamente

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in

Dettagli

Fondamenti di Informatica T. Linguaggio C: i puntatori

Fondamenti 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

Dettagli

Corso di Programmazione I

Corso di Programmazione I Corso di Programmazione I I puntatori in C e C++ I puntatori in C Il C prevede puntatori a funzione e puntatori a dati di qualsiasi natura, semplici o strutturati. In particolare il puntatore viene utilizzato

Dettagli

Unità 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. 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;

Dettagli

Il linguaggio C. Puntatori e dintorni

Il 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;

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio 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

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Linguaggio C: puntatori

Linguaggio 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

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 ! 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

Dettagli

Array. Unità 7. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Array. Unità 7. 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

Dettagli

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover ALLOCAZIONE STATICA: LIMITI 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

Dettagli

Gestione dinamica della memoria

Gestione 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

Allocazione dinamica della memoria

Allocazione dinamica della memoria 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 Violetta Lonati

Dettagli

Elementi di Informatica

Elementi di Informatica Corso di Laurea triennale in Ingegneria Chimica in condivisione con Corso di Laurea triennale in Ingegneria Navale e Scienze dei Materiali Elementi di Informatica A.A. 2016/17 prof. Mario Barbareschi Puntatori

Dettagli

Il puntatore. Il puntatore

Il 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

Dettagli

Verso i puntatori: Cosa è una variabile?

Verso 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

Dettagli

Strutture Dati Dinamiche

Strutture 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

Dettagli

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Argomenti 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

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Strutture dati complesse Esempi di strutture dati complesse analizzate in questa lezione: Fondamenti di Informatica 21. Strutture di dati complesse in C++ Array di puntatori Pila (Stack) Coda (queue) Liste

Dettagli

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Allocazione 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

Dettagli

Quando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2;

Quando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2; Array Quando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2; Il C supporta questo uso attraverso il tipo di dati array (o vettore): int

Dettagli

Allocazione statica della memoria

Allocazione 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=

Dettagli

Parametri Formali di una Funzione e Record di Attivazione

Parametri 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

Dettagli

Passaggio parametri puntatore

Passaggio parametri puntatore Passaggio parametri puntatore Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it

Dettagli

Corso di Informatica A.A

Corso di Informatica A.A Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio

Dettagli

Corso di Informatica A.A

Corso di Informatica A.A Corso di Informatica A.A. 2009-2010 Lezione 10 Lezione 10 1 Inside C : Puntatori Puntatori Referenziazione e Dereferenziazione Pointers: Puntatori Le variabili finora incontrate sono caratterizzate da

Dettagli

Introduzione al C. Unità 6 Puntatori. S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi

Introduzione al C. Unità 6 Puntatori. S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 6 Puntatori S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi Sommario

Dettagli

Lezione 12: Allocazione Dinamica della Memoria

Lezione 12: Allocazione Dinamica della Memoria Lezione 12: Allocazione Dinamica della Memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 17 Aprile 2013 Puntatori e vettori Puntatori ed indirizzi Semplificando, la memoria di un computer

Dettagli

Linguaggio C: PUNTATORI

Linguaggio 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

Dettagli

&v restituisce l indirizzo della zona di memoria allocata per v.

&v restituisce l indirizzo della zona di memoria allocata per v. Puntatori Sia v una variabile di tipo T. Al momento della creazione della variabile v il sistema alloca memoria sufficiente a contenere i valori appartenenti al tipo T. &v restituisce l indirizzo della

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Strutture di dati Laboratorio di Informatica 5. Strutture / Array di oggetti / Pila&Coda in C++ Una struttura è un insieme finito di variabili (dette campi) non necessariamente dello stesso tipo, ognuna

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Concetti Avanzati versione 2.5 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca

Dettagli

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria

Università 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

Dettagli

L AMBIENTE CODE BLOCKS E L IO

L AMBIENTE CODE BLOCKS E L IO L AMBIENTE CODE BLOCKS E L IO Il primo programma in C++ #include using namespace std; main() { cout

Dettagli

Operatore di indirizzo

Operatore 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

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'Allocazione Dinamica della Memoria nel linguaggio C L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione 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

Dettagli

Allocazione Dinamica della Memoria

Allocazione 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

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione 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 2017

Dettagli

20. Gestione della memoria. Andrea Marongiu Paolo Valente

20. Gestione della memoria. Andrea Marongiu Paolo Valente 20. Gestione della memoria Andrea Marongiu (andrea.marongiu@unimore.it) Paolo Valente Classi di memorizzazione Stiamo per vedere la classificazione di un oggetto in funzione del suo tempo di vita In particolare,

Dettagli

Informatica (A-K) 14. Linguaggio C -4

Informatica (A-K) 14. Linguaggio C -4 Strutture Dati in C Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Informatica (A-K) 14. Linguaggio C -4 Strutture Dati tipiche

Dettagli

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami. Consideriamo l esercizio assegnato la scorsa lezione per rappresentare il libretto di uno studente. Per memorizzare i dati si sono utilizzati tre array: char* nomiesami[max ESAMI] Array dei nomi degli

Dettagli

Puntatori in C Lucidi della Pof.ssa Pazienza

Puntatori 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 *

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica -- Conversione di tipo in C (V) -- Laboratorio di Informatica Ingegneria Meccanica Lezione 7, 22 novembre 2007 versione 24 novembre 2007 Renato Menicocci

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

Puntatori. Fondamenti di Programmazione

Puntatori. 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

Dettagli

Il C nel C++: Funzioni

Il 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

Dettagli

Funzioni (1) Il C nel C++: Funzioni. Funzione (2) Vantaggi delle Funzioni. Localizzazione della funzionalità correggibilità manutenibilità

Funzioni (1) Il C nel C++: Funzioni. Funzione (2) Vantaggi delle Funzioni. Localizzazione della funzionalità correggibilità manutenibilità Funzioni (1) Il C nel C++: Funzioni 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

Dettagli

I PUNTATORI PARTE I. Manuale linguaggio C

I PUNTATORI PARTE I. Manuale linguaggio C I PUNTATORI PARTE I Manuale linguaggio C I puntatori Una variabile è un'area di memoria alla quale è associato un nome simbolico, scelto dal programmatore. Tale area di memoria è grande quanto basta per

Dettagli

Allocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica

Allocazione 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

Dettagli

C++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW

C++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW C++ funzioni Alberto Ferrari http://en.cppreference.com FUNZIONI le funzioni caratterizzate da nome, parametri (numero, ordine e tipo) e tipo di ritorno le funzioni hanno un prototipo il prototipo non

Dettagli

Liste concatenate e allocazione dinamica

Liste concatenate e allocazione dinamica Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2017/2018 Calendario delle lezioni Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, 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

Dettagli

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in I Parametri di tipo vettore I Il meccanismo del passaggio per valore di un indirizzo consente il passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad

Dettagli

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1)

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1) Introduzione alle funzioni in C++ Fondamenti di Informatica II 3. Funzioni in C++ (parte 1) Corso di Laurea in Ingegneria Informatica A.A. 2008-2009 2 Semestre Corso (A-M) int main() int n, fattoriale=1;

Dettagli

Lab 11 Allocazione dinamica della memoria

Lab 11 Allocazione dinamica della memoria Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 11 Allocazione dinamica della memoria Lab17 1 STACK L'area di memoria stack é quella in cui viene allocato un

Dettagli

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

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

Dettagli

PUNTATORI. Ivan Lanese

PUNTATORI. Ivan Lanese PUNTATORI Ivan Lanese Argomenti Puntatori Liste Puntatori Un puntatore è un tipo di dato che contiene l'indirizzo di memoria di un altro tipo di dato In c+o i puntatori sono tipati: avremo puntatori a

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Array Array monodimensionali Array bidimensionali Esercizi 16/01/2013 2 ARRAY Gli array sono oggetti utilizzati in Java per memorizzare

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

La programmazione nel linguaggio C. Liste

La programmazione nel linguaggio C. Liste Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di

Dettagli

Le funzioni: la dichiarazione

Le funzioni: la dichiarazione Funzioni I Parte Indice Le funzioni: dichiarazione, definizione e chiamata Le regole di visibilità (scope) Il passaggio degli argomenti per valore e riferimento La funzione main() Le funzioni: la dichiarazione

Dettagli

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Funzioni I Parte Indice Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Le funzioni: la dichiarazione

Dettagli

Fondamenti di Informatica 12. Linguaggio C -4

Fondamenti di Informatica 12. Linguaggio C -4 Strutture Dati in C Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Fondamenti di Informatica 12. Linguaggio C -4 Strutture Dati

Dettagli

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Puntatori. 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

Dettagli

Informatica (A-K) 12. Linguaggio C -3

Informatica (A-K) 12. Linguaggio C -3 Introduzione alle funzioni in C Informatica (A-K) 12. Linguaggio C -3 int main() int i,n, fattoriale=1; printf( Inserire Numero: ); scanf( %d, &n); for (i =2; i

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

Il linguaggio C funzioni e puntatori

Il linguaggio C funzioni e puntatori Salvatore Cuomo Il linguaggio C funzioni e puntatori Lezione n. 8 Parole chiave: Linguaggio C, procedure, funzioni. Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio Email

Dettagli

La gestione della memoria dinamica Heap

La 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

Dettagli

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Funzioni I Parte Indice Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Le funzioni Tutti i linguaggi

Dettagli

Cosa è una variabile?

Cosa è una variabile? 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 contenere il valore

Dettagli

Programmazione I Prova scritta - 10 gennaio h20min

Programmazione I Prova scritta - 10 gennaio h20min Programmazione I Prova scritta - 10 gennaio 2019-1h20min NOTA: Nei programmi si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main, inoltre si sottintenda la presenza delle

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione 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 Violetta Lonati

Dettagli

Puntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Puntatori. 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

Dettagli

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Linguaggio 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

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Università 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)

Dettagli

Introduzione al C++ (continua)

Introduzione al C++ (continua) Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x

Dettagli

Allocazione dinamica della memoria

Allocazione 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

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE 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

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma 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

Dettagli