Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Puntatori e gestione dinamica della RAM
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica.
Puntatori in C e C++.
Strutture dati In linguaggio C. Strutture Spesso gli algoritmi lavorano su insiemi di dati eterogenei Per esempio, per descrivere le caratteristiche di.
Universita di Camerino
1 Classi di memorizzazione. 2 Definiscono le regole di visibilità delle variabili e delle funzioni quando il programma è diviso su più file Stabiliscono.
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Anno accademico Le classi di memorizzazione.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Allocazione dinamica della memoria
Laboratorio di Linguaggi lezione IV: tipi definiti dallutente Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VI Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII B: Puntatori e Pasticci Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione III: tipi base, espressioni, type-cast Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e.
Laboratorio di Linguaggi lezione V: puntatori (1/3) Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione IX: tipi ricorsivi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08.
Laboratorio di Linguaggi lezione II Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
La Programmazione Ricorsiva
Le funzioni a tempo di esecuzione
Fondamenti di informatica Linguaggio C Main Program: Architettura di un PC Diagrammi di flusso Linguaggio C.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Esercizi su File e Liste
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
LdL - LP1 - lez 11 - ver 6 - aa Linguaggi di programmazione I Stringhe (II) Prof. Luigi Di Lascio Lezione 11.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
1. 2 Variabili statiche e dinamiche Un programma è un processo in esecuzione a cui il sistema operativo assegna una certa zona di memoria. Tale zona può.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Il linguaggio C Puntatori e dintorni.
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione XI Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Transcript della presentazione:

Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2004/05

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali int a, b; int una_func(){ int b,c;... } int main(int argc, char* argv[]){ int pippo;... } locali globali

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali differenza 1: lo scoping int a, b; int una_func(){ int b,c;... } int main(int argc, char* argv[]){ int pippo;... } locali: visibili solo dentro il blocco in cui sono definite globali: visibili ovunque nel codice * * chiaramente, dal punto in cui sono definite in poi

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali differenza 1: lo scoping –Nota: le var locali possono "sovrascrivere" nello spazio dei nomi altre variabili int a; int una_func(){ int a;... }

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali differenza 2: inizializzazione automatica int g; int una_func(){ int l; printf("%d",l); \* non si sa cosa scrive *\ } int main(){ printf("%d",g); \* scrive 0 *\ }

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali differenza 2: inizializzazione automatica –Nota: le var locali possono comunque essere inizializzate esplicitamente (of course!) int g; int una_func(){ int l = 0; \* inizializzazione esplicita*\ printf("%d",l); \* scrive 0 *\ } int main(){ printf("%d",g); \* scrive 0 *\ }

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali differenza 3: allocazione e deallocazione –var globali: allocate (ed inizializzate – in ogni caso) all'inizio del programma rimangono allocate per tutta la durata del programma inizializzate solo una volta –var locali: allocate (ed inizializzate – se richiesto) quando si entra nel blocco rimangono allocate solo per la durata della funzione inizializzate tutte le volte

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili globali travestite da locali Esempio: int f(){ int prima_volta = 1; /* vale vero (1) se la funzione f non e' mai stata eseguita prima */ if (prima_volta) { /* inizializzazioni una tamtum */... };... /* operazioni normali */ prima_volta = 0; } ERRORE! prima_volta viene inizializzato a vero ad ogni esecuzione di f

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili globali travestite da locali Esempio: int prima_volta = 1; /* vale vero (1) se la funzione f non e' mai stata eseguita prima */ int f(){ if (prima_volta) { /* inizializzazioni una tamtum */... };... /* operazioni normali */ prima_volta = 0; } e' brutto che "prima_volta" sia globale (visibili da tutto il codice) concettualmente, dovrebbe essere visibile solo dentro f posso metterlo come locale?

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili globali travestite da locali Soluzione elegante: int f(){ static int prima_volta = 1; /* vale vero (1) se la funzione f non e' mai stata eseguita prima */ if (prima_volta) { /* inizializzazioni una tamtum */... };... /* operazioni normali */ prima_volta = 0; } static

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili globali travestite da locali Le variabili locali dichiarate come static : –mantengono lo scope delle variabili locali si evita di "sporcare lo spazio dei nomi" –a tutti gli altri effetti, sono variabili globali ! inizializzate una volta sola etc.

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Nota sul vocabolario " static " è una classe di allocazione (storage class) altre classi di allocazione sono: –" auto ": automatic: In pratica, variabile locale. In disuso. Lasciare sottointeso –" register ": Una variabile locale ottimizzata. E' un consiglio al compilatore (che può essere ignorato). Ora in disuso. Ci si fida del compilatore.

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali differenza 4: dove vengono allocate –partiamo dal perchè: int fa(){ int a;... fb();... } int main(){ int m;... fa();... } int fc(){ int c,d;... } int fb(){ int b;... fc();... }

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali differenza 4: dove vengono allocate –tipica struttura stack LIFO (come una pila di piatti) int fa(){ int a;... fb();... } int main(){ int m;... fa();... } int fc(){ int c,d;... } int fb(){ int b;... fc();... } m a b c d...

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Variabili locali e variabili globali differenza 4: dove vengono allocate –le variabili locali vivono in memoria in un apposito spazio detto Stack –insieme a (le copie de) i parametri

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Organizzazione della memoria Quattro aree : heap (free store) area stack area codice area variabili globali M E M O R I A qui viene tenuto il codice che viene eseguito (linguaggio macchina) qui vivono le variabili globali qui vivono le variabili locali il resto, memoria libera. Riserva da cui si attinge lo spazio per le variabili allocate dinamicamente (con le malloc e calloc)

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Organizzazione della memoria Quattro aree : heap (free store) area stack area codice area variabili globali M E M O R I A variabili locali parametri copia dello stato variabili locali parametri copia dello stato... record di attivazione per la prima funzione chiamata record di attivazione per la funzione chiamata dalla prima funzione

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Organizzazione della memoria Cosa sa il compilatore (staticamente) delle variabili globali: l'indirizzo delle variabili locali: l'offset –rispetto al record di attivazione –il vero indirizzo sara': (posizione dell'attuale record di attivazione) + (offset) [reminder] delle costanti: il valore ide.tipolocazione o A int 10 valore o offeset b p int --- 0xA12F345A --- d int tabella dei Simboli del compilatore --- 0x x const int A=10; int b=10; int f(int p){ int d;... }

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Nota: cambia o no la dimensione delle aree durante l'esecuzione? Quattro aree : heap (free store) area stack area codice area variabili globali M E M O R I A dimensione FISSA dimensione VARIABILE

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Nota: cambia o no la dimensione delle aree durante l'esecuzione? Tipica implementazione : heap (free store) area stack area codice area variabili globali M E M O R I A

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Nota: cambia o no la dimensione delle aree durante l'esecuzione? Tipica implementazione : heap (free store) area stack area codice area variabili globali M E M O R I A blocco 6 blocco 4 blocco 5 descrittore dei blocchi blocco 3 blocco 1 blocco 2 libero occupato

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a E ora... tipi ricorsivi

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Definizione tipi ricorsivi Definire tipi ricorsivi: typedef struct { char nome[20]; char cognome[20]; int peso; } Persona; Persona padre; concettualmente sbagliato. ricorsione infinita

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Definizione tipi ricorsivi Definire tipi ricorsivi: typedef struct { char nome[20]; char cognome[20]; int peso; Persona* padre; } Persona; Concettualmente giusto. (l'ennesimo uso dei puntatori) Ma non compila perche' al momento della dichiarazione del campo padre il tipo Persona non esiste ancora.

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Definizione tipi ricorsivi Definire tipi ricorsivi: modo alternativo typedef struct P { char nome[20]; char cognome[20]; int peso; struct P *padre; } Persona; Persona a,b; a.padre = &b;

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Persona a,b; a.padre = &b; Definizione tipi ricorsivi Definire tipi ricorsivi: modo alternativo typedef struct Persona { char nome[20]; char cognome[20]; int peso; struct Persona *padre; }; struct Persona a,b; a.padre = &b;

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Liste Esempio: le liste typedef struct E { int data; struct E *next; } Elemento; typedef Elemento* pElemento; 1 5 / datanextdatanext

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a Esempio: la lista di numeri ( 1, 5, 2 ) 5 2 / datanextdatanext 1 datanext start typedef struct E { int data; struct E *next; } Elemento; typedef Elemento* pElemento;

M a r c o T a r i n i L a b o r a t o r i o d i L i n g u a g g i / 0 5 U n i v e r s i t à d e l l I n s u b r i a