Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
|
|
- Evelina Capone
- 7 anni fa
- Visualizzazioni
Transcript
1 Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi
2 Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it Parte II ing. Domenico Daniele Bloisi, PhD bloisi@dis.uniroma1.it Nota: %7E corrisponde alla tilde ~ Ricorsione Pagina 2
3 Informazioni Generali ing. Domenico Daniele Bloisi, PhD Dipartimento di Informatica e Sistemistica Via Ariosto 25 (adiacente Piazza Dante, A fermate Manzoni, Vittorio Emanuele, Tram 3 fermata via Labicana) mailto:bloisi@dis.uniroma1.it Pagina 3
4 Ricevimento Su appuntamento. Inviare una per conferma. DIS, via Ariosto 25 II piano, stanza B211 Si consiglia di controllare la bacheca degli avvisi Pagina 4
5 Sommario Memoria, indirizzamento e puntatori Tipo void * e conversioni sui puntatori Gestione dinamica della memoria Tempo di vita delle variabili allocate dinamicamente Problemi di deallocazione della memoria Passaggio dei parametri tramite puntatori Pagina 5
6 Memoria, indirizzamento e puntatori L accesso memoria di un calcolatore avviene attraverso un meccanismo di indirizzamento. In C il programmatore ha la possibilità di gestire gli indirizzi attraverso delle variabili che vengono definite di tipo puntatore. I valori delle variabili di tipo puntatore sono indirizzi di memoria, ossia dei valori numerici che fanno riferimento a specifiche locazioni di memoria. Pagina 6
7 Notazione grafica L indirizzamento si rappresenta graficamente tramite una freccia. Spesso non occorre conoscere lo specifico valore di una variabile di tipo puntatore (es ). Pagina 7
8 Operatore indirizzo-di Per ottenere dei valori di tipo puntatore, cioè degli indirizzi, si utilizza l operatore & int i = 1; printf("l\' indirizzo di i e\' " "%p\n", &i); printf("mentre il valore di i e\' " "%d\n", i); stampa L' indirizzo di i e' 0028FF1C mentre il valore di i e' 1 Pagina 8
9 Operatore indirizzo-di L operatore & si chiama operatore indirizzo-di e restituisce l indirizzo della variabile a cui viene applicato. Nota: i = &10; non è ammesso dato che 10 è una costante int. Analogamente non si può accedere all indirizzo di una espressione. Nota: l indicatore di conversione per un indirizzo è %p (il formato è definito dall implementazione) Pagina 9
10 Operatore di dereferenziamento (indirizzamento indiretto) Quando si considera una variabile di tipo puntatore, l operatore * permette di recuperare il valore della locazione di memoria puntata. int i, j = 1; i = *&j; L istruzione i = *&j; assegna (con una notazione un po complicata) il valore della variabile j alla variabile i. Equivale, in pratica, all istruzione i = j; L operatore (unario) di indirizzamento indiretto * non deve essere confuso con l operatore di moltiplicazione (binario). Pagina 10
11 Operatore di dereferenziamento (indirizzamento indiretto) int i, j = 1; i? j 1 i = *&j; &j *(&j) Valore contenuto in i 1 j 1 Pagina 11
12 Operatore & VS operatore * Se x è una variabile, &x denota l indirizzo in memoria di tale variabile. nome x &x α α indirizzo Se α è l indirizzo in memoria di una variabile, *α denota tale variabile: *α x Pagina 12
13 Variabili di tipo puntatore Per la gestione degli indirizzi occorre dichiarare delle variabili di tipo puntatore, specificando il tipo della locazione di memoria puntata. int *p1;... // allocazione di memoria (vedi dopo) *p1 = 10; dichiara una variabile di tipo puntatore ad intero ed assegna alla variabile puntata il valore 10. Pagina 13
14 Attenzione 1. La dichiarazione di una variabile puntatore non alloca memoria per la variabile puntata; prima di accedere alla variabile puntata bisogna allocare esplicitamente memoria (vedremo dopo come ) 2. Nelle dichiarazioni multiple tipo: int *p1, p2; p2 non è un puntatore! Pagina 14
15 Esempio: uso di variabili puntatore int i, j, k; int *pt_i, *pt_j; pt_i = &i; pt_j = &j; i = 1; j = 2; k = *pt_i + *pt_j; *pt_i = 10; printf("i = %d\n", i); printf("k = %d\n", k); Pagina 15
16 Diagramma della memoria Le variabili di tipo int i, j, k, vengono manipolate attraverso i puntatori alle locazioni di memoria ad esse associate al momento della dichiarazione. Pagina 16
17 Esecuzione Il programma stampa a video: i = 10 k = 3 Pagina 17
18 Assegnazione di un valore specifico a puntatore #include <stdio.h> int main() { int *ptr; ptr = 1000; *ptr = 5; printf("%d\n", *ptr); } Cosa stampa questo codice? Output del compilatore warning: assignment makes pointer from integer without a cast Pagina 18
19 Assegnazione di un valore specifico a puntatore L assegnazione di un indirizzo specifico ad una variabile puntatore è da evitare poiché può causare il crash del programma. Pagina 19
20 Accessi in memoria int i, j = 2, *pt; pt = &j; i = *pt; per ottenere il valore da assegnare a i devono essere fatti 2 accessi in memoria: il primo accesso viene fatto all indirizzo di pt, per recuperare il dato ivi memorizzato, i.e. l indirizzo di j il secondo accesso avviene all indirizzo di j, per recuperare il valore memorizzato nella variabile j Pagina 20
21 Esempio puntatori Consideriamo gli effetti del seguente codice: int *pointer; int x = 1, y = 2; pointer = &x; y = *pointer; x = pointer; *pointer = 3; // dichiara pointer come un // puntatore a int // (1) assegna a pointer l'indirizzo // di x (i.e., pointer punta x) // (2) assegna a y il contenuto di // pointer // (3) assegna ad x l'indirizzo // contenuto in pointer // (4) assegna alla variabile // puntata da pointer il valore 3 Pagina 21
22 Diagramma della memoria x x y (1) y pointer = &x; pointer? pointer Pagina 22
23 Diagramma della memoria x x y (2) y y = *pointer; pointer pointer Pagina 23
24 Diagramma della memoria x x y (3) y x = pointer; pointer pointer Pagina 24
25 Diagramma della memoria x x y (4) y *pointer = 3; pointer pointer Pagina 25
26 Ricapitolando Possibili valori ottenibili tramite l utilizzo di variabili puntatore: pointer valore della variabile puntatore (i.e., l indirizzo della locazione di memoria a cui punta) &pointer indirizzo fisico della locazione di memoria del puntatore *pointer valore contenuto nella locazione di memoria a cui punta il puntatore Pagina 26
27 Operazioni sui puntatori A valori di tipo puntatore si applicano le operazioni del tipo int. Particolarmente utile è l operazione di incremento int *pti;... pt++; che consente di puntare alla successiva locazione di tipo int. L uso di queste operazioni verrà approfondito nella Unità 7 Array e Matrici Pagina 27
28 costanti La specifica const può essere applicata anche a variabili di tipo puntatore. double pi = 3.5; double const *pt = π (*pt)++; // OK (pi vale 4.5) pt++; // NO (pt e costante) In questo caso, la specifica const si applica al puntatore, ma non alla variabile puntata. Pagina 28
29 a costanti Si può anche specificare che un puntatore debba puntare a costanti. const int k = 3; const int *pt; // dichiarazione di puntatore // a costante pt = &k; // OK pt++; // ammesso anche se non si sa cosa // vada a puntare pt int *pti; pti = &k; // NO Pagina 29
30 a puntatori Come per ogni altro tipo si può definire un puntatore ad una variabile di tipo puntatore. double x; double * pt; double ** ptpt; x = 4; pt = &x; ptpt = &pt; printf("%f\n", **ptpt); Cosa stampa questo frammento di codice? Pagina 30
31 Diagramma della memoria stampa il valore di x. Pagina 31
32 Il puntatore NULL (1/3) Le variabili di tipo puntatore possono assumere anche un valore speciale: NULL Questo valore serve a specificare che la variabile non punta alcuna locazione di memoria. In C tale valore in genere corrisponde allo 0, ma si raccomanda di usare NULL, in particolare per verificare che ad una variabile puntatore non sia associato uno specifico riferimento. NULL è una costante simbolica in genere definita in <stdio.h> Pagina 32
33 Il puntatore NULL (2/3) Si faccia attenzione a non confondere variabili il cui valore è NULL con variabili non inizializzate: una variabile non inizializzata non ha alcun valore, neanche NULL. Il confronto con NULL può essere usato in una condizione di un istruzione if-else, for, etc. Pagina 33
34 Il puntatore NULL (3/3) Esempio int *pt = NULL; if (pt!= NULL) *pt = 10; In questo caso il ramo if non viene eseguito. L istruzione *pt = 10; eseguita al momento in cui pt vale NULL genererebbe un errore a tempo di esecuzione. Pagina 34
35 Il tipo void* (1/2) Mentre nel caso delle dichiarazioni dei tipi primitivi è indispensabile definire il tipo della variabile per consentire al compilatore di allocare la memoria necessaria, nel caso dei puntatori, la memoria per il puntatore è fissa (corrisponde alla dimensione di un indirizzo di memoria) e quindi si può omettere la specifica del tipo della variabile puntata. void *pt; int i; pt = &i; Pagina 35
36 Il tipo void* (2/2) In questi casi: non sono più ammesse le operazioni sui puntatori il puntatore assegnato ad una variabile void* non può essere assegnato ad una variabile di tipo puntatore (ad un tipo definito). Pagina 36
37 Conversioni su puntatori Anche nel caso delle variabili di tipo puntatore sono possibili conversioni esplicite: void * pt; int i; pt = &i; int * pti; pti = (int*)pt; // il valore viene convertito // a puntatore a int Tuttavia, l utilizzo delle conversioni sui puntatori è sconsigliato in quanto spesso provoca degli errori di programmazione. Pagina 37
38 Gestione dinamica della memoria Nell 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 38
39 L operatore sizeof (1/2) Il numero di byte occupati da una variabile è dato dall applicazione di sizeof. Esempio sizeof(a) è il numero di byte occupati dalla variabile a Pagina 39
40 L operatore sizeof (2/2) L operatore sizeof può essere applicato ad un tipo, ad un nome di variabile o ad una costante Restituisce la dimensione in byte dell oggetto passato come parametro tale calcolo viene effettuato in compilazione in base al tipo di dato che viene passato a sizeof se si incrementa un puntatore p, il suo valore numerico (indirizzo in memoria in byte) verrà incrementato di sizeof(*p) Pagina 40
41 stampa indirizzo, occupazione di memoria e valore int main (void) { int a = 12; char b = 'a'; float c = ; printf ("Indirizzo di a e\' %x, occupa %d bytes," " il suo valore e\' %d\n", &a, sizeof(a), a); printf ("Indirizzo di b e\' %x, occupa %d bytes," " il suo valore e\' %c\n", &b, sizeof(b), b); printf ("Indirizzo di c e\' %x, occupa %d bytes," " il suo valore e\' %f\n", &c, sizeof(c), c); return 0; } %x intero esadecimale senza segno Pagina 41
42 Esecuzione Esercizio 6.1 Si modifichi il codice precedente in modo da stampare la parola byte se l occupazione è pari ad 1, mentre bytes se l occupazione è > 1 Es. Indirizzo di b e' 28ff1b, occupa 1 byte, il suo valore e' a Pagina 42
43 Differenza tra valore e indirizzo di una variabile L indirizzo è dato in forma numerica (ma non di tipo numerico) ed è assegnato dal compilatore Il valore è assegnato dal programma Tutte le variabili dello stesso tipo occupano lo stesso numero di byte Hanno la medesima rappresentazione interna Pagina 43
44 Applicazione di sizeof (1/2) Essendo un operatore, sizeof può essere utilizzato ponendo l operando tra parentesi oppure anche senza l utilizzo delle parentesi Le seguenti istruzioni sono equivalenti tra loro: char a = 'r'; int size_a; size_a = sizeof a; size_a = sizeof(a); Pagina 44
45 Applicazione di sizeof (2/2) Un eccezione a questa possibilità si ha nel caso seguente: int size_float; size_float = sizeof(float); size_float = sizeof float; // espressione // valida // errore in // compilazione quando l operando di sizeof è il nome di un tipo di dato (float, nell esempio), le parentesi sono obbligatorie. Pagina 45
46 Allocazione dinamica della memoria Durante l esecuzione, un programma può richiedere esplicitamente uno spazio di memoria per immagazzinare dati. Allo stesso modo, può richiedere di rilasciare tale spazio quando non sarà più necessario. Il C offre la funzione malloc per riservare (allocare) uno spazio di memoria e la funzione free per rilasciare (deallocare) memoria. Insieme all operatore sizeof sono essenziali per l allocazione dinamica della memoria. Pagina 46
47 Funzione malloc La funzione malloc permette di allocare dinamicamente una porzione (chunk) di memoria. void *malloc( size_t size ); Restituisce un puntatore alla porzione di memoria di dimensione size oppure NULL se si è verificato un errore. E definita nella standard library - va inserita la direttiva #include <stdlib.h> size_t è definito come il tipo intero senza segno restituito dall operatore sizeof Pagina 47
48 Esempio malloc int *p; crea in memoria una variabile di tipo puntatore a int p = malloc(sizeof(int)); crea in memoria una variabile di tipo int restituisce l indirizzo della variabile creata (primo byte) assegna l indirizzo restituito a p *p = 7; la variabile di tipo int creata assume il valore 7 printf("%d", *p); viene stampato a video 7 Pagina 48
49 Modello di allocazione dinamica L allocazione dinamica della memoria avviene nello heap. Se lo spazio di memoria allocabile dinamicamente è esaurito viene restituito il puntatore NULL. int *pt1; // dichiarazione del puntatore ad int pt1 = malloc(sizeof(int)); // creazione dinamica // della variabile int if (pt1 == NULL) { printf("allocazione fallita\n"); exit(exit_failure); } In caso di mancanza di memoria il programma termina con l istruzione exit(exit_failure); che notifica il fallimento. Pagina 49
50 Funzione free La funzione free permette di deallocare la memoria allocata dinamicamente. void free( void* ptr ); free dealloca lo spazio puntato da ptr, rendendolo disponibile per usi futuri. Nota: ptr deve essere stato usato in una chiamata precedente a malloc() E definita nella standard library (<stdlib.h>) Pagina 50
51 Esempio free #include <stdio.h> #include <stdlib.h> int main() { int *p; double *d; p = malloc(sizeof(int)); *p = 7; printf("%d", *p); free(p); d = malloc(sizeof(double)); *d = 7; printf(" %f", *d); free(d); } Pagina 51
52 Esercizi Esercizio 6.2 Scrivere un programma che legga 10 numeri interi e restituisca il minimo, usando variabili di tipo puntatore ad int anziché variabili di tipo int. Esercizio 6.3 Scrivere il programma dell esercizio precedente tramite allocazione dinamica della memoria. Deallocare la memoria utilizzata prima della terminazione del programma. Pagina 52
53 Esercizi Esercizio 6.4 Scrivere una funzione che dato in ingresso un puntatore ne stampi la dimensione in byte, il valore, l indirizzo di memoria ed il valore della variabile puntata. Scrivere un programma che ne verifichi il comportamento. Pagina 53
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
DettagliIntroduzione 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
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
DettagliUnità 11 Allocazione dinamica
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 11 Allocazione dinamica S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi
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
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
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
DettagliMatrici. 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
DettagliParte II ing. Domenico Daniele Bloisi, PhD
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Unità 5-6 Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliPassaggio 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
DettagliVariabili. 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
DettagliChar. Parte 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
DettagliFunzioni. Unità 1. 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
DettagliArray. 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
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
DettagliPassaggio 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
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
DettagliIstruzioni Condizionali
Istruzioni Condizionali 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
DettagliEsercitazione 6. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR. 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
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
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
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
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
DettagliIstruzioni Condizionali
Istruzioni Condizionali 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
DettagliEsercizi con Array. Unità 7. 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
DettagliChar. Unità 2. 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
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;
DettagliVariabili 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
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
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
DettagliPer 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
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
DettagliMatrici. 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
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
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
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;
DettagliAllocazione 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
DettagliCosa è 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
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
DettagliVARIABILI AUTOMATICHE E DINAMICHE. Manuale linguaggio C
VARIABILI AUTOMATICHE E DINAMICHE Manuale linguaggio C Variabili automatiche e dinamiche In C è possibile classificare le variabili in base al loro tempo di vita in: variabili automatiche variabili dinamiche
Dettaglipuntatori Lab. Calc. AA 2006/07 1
puntatori Lab. Calc. AA 2006/07 1 Attributi di un oggetto nome o identificatore; tipo; valore (o valori); indirizzo; Lab. Calc. AA 2006/07 2 Indirizzo Consideriamo la dichiarazione con inizializzazione:
DettagliVariabili. Unità 2. 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
DettagliLinguaggio C: Puntatori Valeria Cardellini
Linguaggio C: Puntatori Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Argomenti
DettagliEsercitazione 5. Unità Domenico Daniele Bloisi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Unità 6-7-8 Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliFor e do. Parte 4. 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
DettagliChar e bool. 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
DettagliMatrici. Unità 7. 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
DettagliVariabili. Unità 2. 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
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
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.
DettagliGestione della memoria
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
DettagliI puntatori. DD Cap.7 pp KP Cap.6 pp
I puntatori DD Cap.7 pp.245-280 KP Cap.6 pp.219-235 Cos è un puntatore Un puntatore è una variabile che assume come valore un indirizzo di memoria. Il nome di una variabile fa quindi riferimento ad un
DettagliEsercitazione 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&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
DettagliDefinizione di classi
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
DettagliIntroduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso
Introduzione al C Lezione 4 Allocazione dinamica della memoria Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso
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
DettagliControllo del flusso
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
DettagliIstruzioni Condizionali
Istruzioni Condizionali Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione
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
DettagliListe 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,
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 12 Corso di Informatica 2009-2010 Lezione 12 1 Allocazione dinamica della memoria La funzione calloc() La funzione calloc() alloca memoria dinamicamente. Numero
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
DettagliLaboratorio di Informatica
-- Conversione di tipo in C (V) -- Laboratorio di Informatica Ingegneria Meccanica Lezione 7, 22 novembre 2007 versione 24 novembre 2007 Renato Menicocci
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
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
DettagliCorso 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
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
DettagliL'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
DettagliIstruzioni Condizionali
Istruzioni Condizionali Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio
DettagliIntroduzione al C. Unità 7 Array. 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à 7 Array S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi Sommario Unità
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
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
DettagliIntroduzione al C Lez. 4
Introduzione al C Lez. 4 Allocazione Dinamica della memoria http://www.di.unipi.it/~rossano/algo1/lez4.pdf Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso
DettagliAllocazione dinamica della memoria: calloc() Se T è il nomed di un tipo, la chiamata calloc(n, sizeof(t)) è equivalente a malloc(n * sizeof(t))
Allocazione dinamica della memoria: malloc() In C è possibile allocare dinamicamente un area di memoria (ossia, durante l esecuzione di un programma) tramite le funzioni malloc() e calloc() (occorre includere
DettagliIntroduzione al C Lez. 4. Allocazione Dinamica della memoria
Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria
DettagliLezione 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
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 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
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
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=
DettagliFIL I Puntatori. Michele Nappi biplab.unisa.it. 15/12/2014 M. Nappi/FIL 1
FIL I Puntatori Michele Nappi mnappi@unisa.it biplab.unisa.it 15/12/2014 M. Nappi/FIL 1 Introduzione I puntatori Una delle caratteristiche più potenti del C, ma difficile da padroneggiare Si usano per
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
DettagliPOINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.
POINTERS Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. Es. Sia y una variabile intera di valore e sia yptr una variabile pointer avente come valore l indirizzo di y.
DettagliCorso 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
DettagliStrutture. 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
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica 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, e seguita
DettagliCorso 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
DettagliI 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
DettagliProf. G. Ascia. I puntatori. Fondamenti di Informatica
I puntatori 1 Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
Dettagli