Il linguaggio C. Puntatori e dintorni

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Il linguaggio C. Puntatori e dintorni"

Transcript

1 Il linguaggio C Puntatori e dintorni 1

2 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; /* una var intera */ int * b; /* una var puntatore a interi */... b = &a; /* assegna a b l indirizzo della cella in cui è memorizzata a */ 2

3 Puntatori : idea di base (2) In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50; int * b; b = &a; a è memorizzata nella cella

4 Puntatori : idea di base (3) nometype * è il tipo degli indirizzi delle variabili di tipo nometype es : int a = 50; int * b; b = &a; tipo dei puntatori a intero b è memorizzata nella cella 450 (&b) 4

5 Puntatori : idea di base (4) Operatore & denota l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50; int * b; b = &a; Dopo questo assegnamento in b è memorizzato l indirizzo di a 5

6 Puntatori : idea di base (5) Operatore di dereferenziazione * è possibile conoscere e/o modificare il contenuto di una variabile manipolando direttamente il suo puntatore es : int a = 50; int * b = &a; *b = *b + 4; Denota la variabile a indirizzo b Dopo questo assegnamento in a è memorizzato il valore

7 Puntatori : idea di base (6) NULL costante predefinita (in stdio.h) che denota il puntatore nullo È possibile definire puntatori per tutti i tipi base e le strutture con (*) double *a, *b; /* ripetere * */ int *a, b, c[4], **d; struct studente *t1; Segnaposto ( %p ) stampa il valore dell indirizzo in notazione esadecimale 7

8 Aritmetica dei puntatori È possibile scrivere espressioni puntatore usando alcuni degli usuali operatori aritmetici (+, -, --, ++) int a[3], *p = &a[0]; IN+12 p contiene l indirizzo IN IN+8 IN+4 IN a[2] a[1] a[0] 8

9 Aritmetica dei puntatori (2) È possibile scrivere espressioni puntatore usando alcuni degli usuali operatori aritmetici int a[3], *p = &a[0]; p = p + 1; p contiene l indirizzo IN + 4 IN+12 IN+8 IN+4 IN a[2] a[1] a[0] 9

10 Aritmetica dei puntatori (3) È possibile scrivere espressioni puntatore usando alcuni degli usuali operatori aritmetici int a[3], *p = &a[0]; p = p + 1; p--; p contiene l indirizzo IN IN+12 IN+8 IN+4 IN a[2] a[1] a[0] 10

11 Aritmetica dei puntatori (4) È possibile scrivere espressioni puntatore usando alcuni degli usuali operatori aritmetici (+, -, --, ++) int a[3], *p = &a[0]; p = p + 1; p--; p += 3; p contiene l indirizzo IN + 12 (sizeof(int) == 4..) IN+12 IN+8 IN+4 IN a[2] a[1] a[0] 11

12 Aritmetica dei puntatori (5) È possibile scrivere espressioni puntatore usando alcuni degli usuali operatori aritmetici (+, -, --, ++) int a[3],*p = &a[0],*q; p = p + 1; p--; q = p; p += 3; a[0] = p - q; IN+12 IN+8 IN+4 IN a[2] a[1] a[0] a[0] contiene 3, numero di int memorizzabili fra p e q 12

13 Puntatori e array Il nome di un array è il puntatore (costante) al primo elemento dell array int a[3], *p = &a[0], *q; q = a; IN+12 IN+8 IN+4 IN a[2] a[1] a[0] q contiene l indirizzo IN a == IN 13

14 Puntatori e array (2) L operatore [-] è una abbreviazione int a[3], *p = &a[0], *q, tmp; /* i due stm che seguono sono equivalenti */ tmp = a[2]; tmp = *(a+2); a+3 a+2 a+1 a a[2] a[1] a[0] 14

15 Puntatori e array (3) L operatore [ ] è una abbreviazione e può essere usato con una qualsiasi variabile puntatore int a[3],*p = a,*q,tmp; tmp = a[2]; tmp = p[2]; a+3 a+2 a+1 a a[2] a[1] a[0] 15

16 Puntatori e array (4) I seguenti frammenti di codice sono equivalenti int a[n], *p = a, *q, tmp; int sum = 0; /* versione 1 */ for(i = 0; i < N; i++) sum += a[i]; /* versione 2 */ for(i = 0; i < N; i++) sum += *(a+i); 16

17 Puntatori e array (5) I seguenti frammenti di codice sono equivalenti (segue) int a[n], *p = &a[0], *q, tmp; int sum = 0; /* versione 3 */ for(i = 0; i < N; i++) sum += p[i]; /* versione 4 */ for(p = a; p < (a+n); p++) sum += *p; 17

18 Puntatori e array (6) Una riflessione sulle stringhe le stringhe sono array di caratteri char a[7] = ciao ; le stringhe costanti possono essere definite anche come const char * pp = ciao ; char * pp = ciao ; attenzione! Se a questo punto cercate di modificare un elemento di pp (es. pp[2] = `f`;) avete un errore a run time mentre a[2] = `f`; è completamente corretto 18

19 Passaggio di parametri per riferimento Tutti i parametri delle funzioni C sono passati per valore il loro valore viene copiato sullo stack ogni modifica al parametro nel corpo della funzione non modifica l originale È possibile realizzare passaggi per riferimento utilizzando i puntatori i passaggi per riferimento permettono di modificare il valore di una variabile nell ambiente del chiamante 19

20 Passaggio di parametri per riferimento (2) Esempio : la funzione che scambia fra loro i valori di due variabili si potrebbe pensare di programmarla come... void scambia (int x, int y){ } int tmp; tmp = x; x = y; y = tmp; e poi chiamare scambia(a,b) 20

21 Passaggio di parametri per riferimento (3) Esempio : la funzione che scambia fra loro i valori di due variabili si potrebbe pensare di programmarla come... void scambia (int x, int y){ } int tmp; tmp = x; x = y; y = tmp; non funziona! Perché lo scambio viene fatto sulle copie 21

22 Passaggio di parametri per riferimento (3.1) Esempio : la funzione che scambia fra loro i valori di due variabili esempio di chiamata int a = 4, b = 5; scambia(a,b); &a &b stack 4 5 Frame chiamante &x &y 4 5 Frame scambia 22

23 Passaggio di parametri per riferimento (3.2) Esempio : la funzione che scambia fra loro i valori di due variabili alla fine dell esecuzione di scambia (prima di ritornare al chiamante) int a = 4, b = 5; scambia(a,b); &a 4 &b 5 Frame chiamante &x &y 5 4 Frame scambia 23

24 Passaggio di parametri per riferimento (3.3) Esempio : la funzione che scambia fra loro i valori di due variabili al momento di eseguire la printf (il frame di scambia non è più significativo) int a = 4, b = 5; scambia(a,b); printf( %d,%d,a,b); &a &b 4 5 Frame chiamante 24

25 Passaggio di parametri per riferimento (4) Esempio : la funzione che scambia fra loro i valori di due variabili la versione corretta è... void scambia (int *x, int *y){ } int tmp; tmp = *x; *x = *y; *y = tmp; con chiamata scambia(&a,&b) 25

26 Passaggio di parametri per riferimento (4.1) Versione corretta di scambia... esempio di chiamata int a = 4, b = 5; scambia(&a,&b); stack &a &b 4 5 Frame chiamante Ogni modifica a *x modifica il valore di a nell ambiente del chiamante &x &y &a &b Frame scambia 26

27 Passaggio di parametri per riferimento (4.2) Esempio : versione corretta di scambia... alla fine dell esecuzione di scambia (prima di ritornare al chiamante) int a = 4, b = 5; scambia(&a,&b); &a &b 5 4 Frame chiamante &x &y &a &b Frame scambia 27

28 Passaggio di parametri per riferimento (4.3) Esempio : versione corretta di scambia... al momento di eseguire la printf (il frame di scambia non è più significativo) int a = 4, b = 5; scambia(&a,&b); printf( %d,%d,a,b); &a &b 5 4 Frame chiamante 28

29 Passaggio di parametri per riferimento (5) ATTENZIONE : gli array sono passati sempre per riferimento perché quello che si passa è il nome dell array void assegna (int x[ ]) { } x[0] = 13; con chiamata int a[10]; assegna(a); /* qua a[0] vale 13 */ 29

30 Passaggio di parametri per riferimento (6) Inoltre : le due scritture void assegna (int x[ ]){ } x[0] = 13; e void assegna (int *x){ } x[0] = 13; sono del tutto equivalenti si preferisce usare la prima per leggibilità 30

31 Passaggio di parametri per riferimento (7) Tipicamente le funzioni che lavorano su array hanno un secondo parametro che fornisce la lunghezza int somma (int x[ ], int l){ int i, s = 0; for(i = 0; i < l; i++) s += x[i]; return s; } somma tutti gli elementi di un array intero di lunghezza l 31

32 Passaggio di parametri per riferimento (8) Per gli array multidimensionali la cosa è più complessa!!!! int somma (int x[ ][4], int l){ } int i, j, s = 0; for(i = 0; i < l; i++) for(j = 0; j < 4; j++) return s; s += x[i][j]; invece di 4 posso usare N costante 32

33 Passaggio di parametri per riferimento (9) Perché dobbiamo specificare l ampiezza di una seconda dimensione di un array? Dipende dalla strategia di memorizzazione per gli array multidimensionali es: int a[2][3]={{1,2,3},{4,5,6}}; a[i][j] ha come indirizzo a+i*3+j a &a[0][1] &a[0][2] &a[1][0] &a[1][1] &a[1][2]

34 Passaggio di parametri per riferimento (10) Se non conosco la lunghezza della seconda dimensione il compilatore non riesce a generare codice corretto int somma (int x[ ][4], int l){ } int i, j, s = 0; for(i = 0; i < l; i++) for(j = 0; j < 4; j++) return s; s += x[i][j]; 34

35 Passaggio di parametri per riferimento (11) Esiste un modo migliore di quello appena esaminato per la rappresentazione degli array multidimensionali in C : lo vedremo in seguito 35

36 E le strutture??? Le strutture vengono sempre passate per valore Se una struttura contiene un array, allora l array viene copiato! Attenzione quando si passano strutture con campi array molto grandi! Se voglio modificare una struttura devo sempre utilizzare i puntatori! 36

37 E le strutture??? (2) Esempio typedef struct studente { char nom_cogn[40]; unsigned int matricola; } studente; void scambia (studente * s1, studente * s2); 37

38 E le strutture??? (3) Esempio void scambia (studente * s1, studente * s2) { (*s1).matricola = 4; s1->matricola = 4; /*sono equivalenti */ } 38

39 E le strutture??? (4) Esempio : Come si dichiara una lista in C? Usando i puntatori typedef struct nodo { struct nodo * next; int info; } nodo; Mi serve il nome della struttura! 39

40 Allocazione dinamica della memoria La creazione di nuove variabili a run time (tipo new in Java) viene effettuata in C utilizzando le funzioni di libreria standard che permettono l allocazione dinamica di porzioni contigue di memoria malloc, calloc, realloc #include <stdlib.h> Con queste primitive è possibile creare dinamicamente variabili e array di dimensione non nota a priori 40

41 Array dinamici -- malloc( ) Vediamo come creare dinamicamente un array di 10 posizioni int * a; /*conterrà il puntatore al primo elemento dell array*/ a = malloc(10*sizeof(int)); Punta allʼindirizzo iniziale della nuova area allocata 40 byte 100 heap 96 41

42 Array dinamici -- malloc( ) (2) Vediamo come creare dinamicamente un array di 10 posizioni int * a; /*conterrà il puntatore al primo elemento dell array*/ a = malloc(10*sizeof(int)); if (a == NULL) printf( fallimento!\n ); Se malloc non riesce ad allocare lʼarea di memoria richiesta restituisce NULL (verificare ) heap 42

43 Array dinamici -- malloc( ) (3) Vediamo come creare dinamicamente un array di 10 posizioni int * a; /*conterrà il puntatore al primo elemento dell array*/ a = malloc(10*sizeof(int)); if (a == NULL) printf( fallimento!\n ); else { } a[4] = 345; Lʼarray si può accedere con i consueti operatori (come se fosse statico) 40 byte heap

44 Array dinamici -- malloc( ) (4) malloc non inizializza la memoria a 0! Possiamo inizializzarla esplicitamente o usare calloc int * a; /*conterrà il puntatore al primo elemento dell array*/ a = calloc(10*sizeof(int)); If (a == NULL) printf( fallimento!\n ); else { } a[4] = 345; 44

45 Array dinamici -- realloc( ) realloc modifica la lunghezza di un area allocata precedentemente int * a, * b; /*puntatori al primo elemento dell array*/ a = malloc(10*sizeof(int)); b = realloc(a,20*sizeof(int)); /* adesso b punta ad un array di 20 elementi */ 45

46 Array dinamici -- realloc( ) (2) Meglio usare sempre due puntatori diversi (a,b)! Altrimenti in caso di fallimento NULL sovrascrive il vecchio puntatore 46

47 Array dinamici -- free( ) Lo spazio allocato sullo heap non viene deallocato all uscita delle funzioni La deallocazione deve essere richiesta esplicitamente usando free int * a; a = malloc(10*sizeof(int)); free(a); /* se qua accedo di nuovo ad a può succedere di tutto */ 47

48 tipo puntatore generico: void * non si può dereferenziare è necessario un cast prima di manipolare la variabile puntata Es. void * c; int a; c = &a; *c = 5; /* scorretto*/ *(int *)c = 5; /* corretto*/ 48

49 tipo puntatore generico: void * (2) Serve a scrivere funzioni polimorfe in una maniera un po brutale Esempio il tipo della malloc è void * malloc (unsigned int size); quando scrivo int * a; a = malloc(10*sizeof(int)); viene effettuato un cast implicito a (int *) 49

50 tipo puntatore generico: void * (3) Tipi delle altre funzioni di allocazione e deallocazione void * calloc (unsigned int size); void * realloc (void * ptr, void free (void * ptr); unsigned int size); 50

51 I puntatori a funzione Consideriamo la funzione int somma (int x, int y) { } return x + y; se proviamo ad eseguire printf( %p, somma); otteniamo un valore esadecimale che rappresenta un indirizzo legale del nostro programma?????????????????????????? 51

52 I puntatori a funzione (2) Consideriamo la funzione int somma (int x, int y) { } return x + y; IND Codice compilato di somma somma è un puntatore costante con valore pari a IND 52

53 I puntatori a funzione (3) Consideriamo la funzione int somma (int x, int y) { return x + y; } /* variabile di tipo funzione (int,int)->int */ int (*fun) (int,int); int a; fun = somma; a = fun(3,5); 53

54 I puntatori a funzione (4) Consideriamo la funzione int somma (int x, int y) { return x + y; } /* variabile di tipo funzione (int,int)->int */ int (*fun) (int,int); int a; fun = somma; a = fun(3,5); Ma a che serve???????????? 54

55 I puntatori a funzione (5) Serve a definire funzioni che prendono come argomenti altre funzioni (di ordine superiore) void map (int (*fun) (int), } int x[ ], int l) { for(i = 0; i < l; i++) x[i] = fun(x[i]); è un iteratore che applica la funzione fun a tutti gli elementi dell array x 55

56 I puntatori a funzione (6) Esempio di uso della map int piu_uno (int x) { return x+1;} int quad (int x) { return x*x;} int a[3] = {3,4,5}; map(piu_uno,a,3); /* somma uno a tutti gli elementi */ map(quad,a,2); /* eleva al quadrato i primi due elementi */ 56

57 Argomenti della linea di comando Gli argomenti della linea di comando sono accessibili all interno della funzione main il SO li inserisce sullo stack prima di attivare il processo il formato in cui sono resi disponibili è fisso int main (int argc, char * argv[ ]) { } Numero di argomenti nella linea di comando Array di puntatori agli argomenti (ciascuno è una stringa, tipo char*) 57

58 Argomenti della linea di comando (2) Esempio %> a.out una stringa per a.out 5 argc argv[0] a. o u t \O u n a \O s t r i n g argv p e r \O a. o u t \O a \O 58

59 Argomenti della linea di comando (3) Esempio : Schema di programma che stampa gli argomenti sulla linea di comando int main (int argc, char * argv[ ]) { } for(i = 0; i < argc; i++) printf( arg %d: %s, i, argv[i]); 59

60 Array multidimensionali come array di puntatori Vogliamo permettere la definizione di funzioni su array multidimensionali che non dipendono dal valore delle dimensioni successive alla prima int sum_mat (int ** MAT, int n, int m) { Nome della matrice } Numero di righe, colonne 60

61 Array multidimensionali come array di puntatori (2) Vogliamo accedere agli elementi dell array usando la solita notazione [-][-] int sum_mat (int ** MAT, MAT[i][j] = ; int n, int m) { } *(MAT + i*m + j) Il compilatore dovrebbe conoscere il legame fra questi due oggetti 61

62 Array multidimensionali come array di puntatori (3) Una alternativa: abbandonare l allocazione contigua per righe MAT MAT[0] MAT[1] MAT[2] MAT[3] MAT[2][2] MAT[4]

63 Array multidimensionali come array di puntatori (4) Una alternativa: vediamo i tipi... int** MAT int*[5] MAT[0] MAT[1] MAT[2] MAT[3] int[4] MAT[2][2] MAT[4]

64 Array multidimensionali come array di puntatori (5) indirizzo valore Una alternativa: in memoria non ho più aree contigue... MAT[0] MAT MAT[1] MAT[2] 64

65 Array multidimensionali come array di puntatori (6) Perché funziona? int sum_mat (int ** MAT, int n, int m) { MAT[i][j] = ; } *(*(MAT + i) + j) Questo legame non interessa più! 65

66 Array multidimensionali come array di puntatori (7) Funzione di allocazione int ** mat_new(unsigned int m, } unsigned int n) { int i, ** a, errore = FALSE; a = malloc(m*sizeof(int*)); if (a == NULL) return NULL; for(i = 0; (i < m) && (!errore); i++) { a[i] = malloc(n*sizeof(int)); if (a[i] == NULL) errore = TRUE; } if (errore) /* gestione errori */ else return a; 66

67 Array multidimensionali come array di puntatori (8) Funzione di deallocazione void mat_free(int ** a, unsigned int m) { } int i; /* dealloco tutte le righe */ for(i = 0; i < m; i++) free(a[i]); /* dealloco l array dei puntatori alle righe */ free(a); 67

68 assert( ) Permettono di fare controlli di consistenza a tempo di esecuzione prevenire meglio che curare esempio: un indice i è davvero dentro i limiti dell array? int x, a[n], i; assert(i < N); x = a[i]; 68

69 assert( ) (2) #include <assert.h> assert(expr); se expr è falsa il sistema stampa un messaggio di errore e termina se expr è vera non ha alcun effetto! 69

70 assert( ) (3) Le assert costano! Quando usarle per effettuare controlli di consistenza dopo chiamate a codice complesso tipicamente non abbiamo i sorgenti (se è scritto da altri) e comunque anche se li abbiamo non è mai garantita la correttezza! si controlla se i valori risultanti sono rispondenti alle specifiche fornite si controllano invarianti noti dell applicazione che stiamo scrivendo 70

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

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

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

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

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

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

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

Uso avanzato dei puntatori Allocazione dinamica della memoria

Uso 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

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

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

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

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

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

L Allocazione Dinamica della Memoria

L Allocazione Dinamica della Memoria L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento

Dettagli

I puntatori e l allocazione dinamica di memoria

I puntatori e l allocazione dinamica di memoria I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in

Dettagli

Il linguaggio C. Puntatori e Array

Il linguaggio C. Puntatori e Array Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si

Dettagli

Introduzione al C. Unità Gestione Dinamica della Memoria

Introduzione 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

Dettagli

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22 Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)

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

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

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

Esercizi 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

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

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

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

Introduzione ai puntatori in C Definizione

Introduzione ai puntatori in C Definizione Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il

Dettagli

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione

Dettagli

Allocazione dinamica. VLA, malloc() e dintorni

Allocazione dinamica. VLA, malloc() e dintorni Allocazione dinamica VLA, malloc() e dintorni Rappresentazione di sequenze... È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse: Es: sequenza

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

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

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

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura

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

Il linguaggio C. Notate che...

Il linguaggio C. Notate che... Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione

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

Esercizi Array Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi 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

Dettagli

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

Dettagli

Programmazione (imperativa)

Programmazione (imperativa) Programmazione (imperativa) Corso di Laurea in Informatica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Lunedì 12.00-13.00 e 14.00-16.00 Mercoledì 14.00-17.00 Laboratorio: Giovedì 12.00-13.00

Dettagli

L'allocazione dinamica della memoria

L'allocazione dinamica della memoria L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria

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

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p

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

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 1: funzione con valore di ritorno di tipo puntatore Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio

Dettagli

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori: Le tabelle In C, dato un tipo di variabile, è possibile costruire un array di variabili di tale tipo usando la dichiarazione (facendo l esempio per il tipo float): float vettore[100]; Applicando lo stesso

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

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere

Dettagli

La struttura dati CODA

La struttura dati CODA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta

Dettagli

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays Pointers: Puntatori (I) Le variabili finora incontrate sono caratterizzate da un nome (o identificativo), un tipo, ed occupano un area di memoria di dimensione dipendente dal tipo. Per accedere ad una

Dettagli

Consideriamo un vettore allocato dinamicamente

Consideriamo un vettore allocato dinamicamente Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero

Dettagli

Array e puntatori in C

Array e puntatori in C Array e puntatori in C Diapositive adattate dalle omonime create dalla Dottoressa di Ricerca Giovanna Melideo per il corso di Laboratorio di Algoritmi e Strutture Dati 10/05/2005 LP2-04/05 - Appunti di

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

Il linguaggio C Strutture

Il linguaggio C Strutture Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi

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

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

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Puntatori 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

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

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento

Dettagli

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Array di Tipi di dato utente Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Array di Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione

Dettagli

Array k-dimensionali

Array k-dimensionali Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per

Dettagli

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che

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

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 5 Struct, Union e allocazione dinamica della memoria Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro

Dettagli

Struct, enum, Puntatori e Array dinamici

Struct, enum, Puntatori e Array dinamici Struct, enum, Puntatori e Array dinamici Tratti dal corso del Dr. Francesco Fabozzi Corso di Informatica Tipi di dato in C Abbiamo esaminato diversi tipi di dato che il C mette a disposizione dell utente

Dettagli

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Definizione 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

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

Implementazione di Liste puntate

Implementazione di Liste puntate Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Implementazione di Liste puntate 2 1 Indice Liste puntate semplici: Gli elementi sono logicamente

Dettagli

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Damiano Macedonio Esercizio 1 Scrivere una funzione che riceve in ingresso un puntatore ad un array di interi e modifica tale array

Dettagli

Allocazione dinamica

Allocazione dinamica Allocazione dinamica Quando non si sa a priori quanto un array debba essere grande allocazione dinamica di array Quando si deve restituire un array come risultato di una funzione (a meno di non barare

Dettagli

Ottenere una modifica del parametro attuale

Ottenere una modifica del parametro attuale Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)

Dettagli

La gestione della memoria

La gestione della memoria La gestione della memoria DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 RIGUTINI@DII.UNISI.IT HTTP://WWW.DII.UNISI.IT/~RIGUTINI/

Dettagli

Breve Ripasso del linguaggio C

Breve Ripasso del linguaggio C Breve Ripasso del linguaggio C Michelangelo Diligenti Ingegneria Informatica e dell'informazione diligmic@diism.unisi.it Compilazione, linking, ecc sorgente oggetto librerie sorgente oggetto editor sorgente

Dettagli

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Dettagli

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti

Dettagli

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Dettagli

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso

Dettagli

Tipi di dato strutturati: Array

Tipi di dato strutturati: Array Tipi di dato strutturati: Array I dati visti finora sono: numeri (interi o razionali), booleani le stringhe (sequenze di caratteri) ma i dati manipolati nelle applicazioni reali sono spesso complessi (o

Dettagli

L uso della memoria L allocazione dinamica della memoria in C Le funzioni malloc, calloc, realloc e free L allocazione dinamica in C++

L uso della memoria L allocazione dinamica della memoria in C Le funzioni malloc, calloc, realloc e free L allocazione dinamica in C++ Funzioni II Parte Indice L uso della memoria L allocazione dinamica della memoria in C Le funzioni malloc, calloc, realloc e free L allocazione dinamica in C++ Gli operatori new e delete I tipi restituiti

Dettagli

Elementi di Informatica A. A. 2016/2017

Elementi di Informatica A. A. 2016/2017 Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 2

Dettagli

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione

Dettagli

Strutture Dinamiche. Fondamenti di Informatica

Strutture Dinamiche. Fondamenti di Informatica Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));

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

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari 7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario

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

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

Stringhe e allocazione dinamica della memoria

Stringhe e allocazione dinamica della memoria Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per

Dettagli

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

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

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 (in C) Emilio Di Giacomo

Puntatori (in C) Emilio Di Giacomo Puntatori (in C) Emilio Di Giacomo Puntatori In questa lezione parleremo di uno dei costrutti più potenti del C: i puntatori I puntatori vengono utilizzati per realizzare il passaggio di parametri per

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Linguaggio C I puntatori

Linguaggio C I puntatori FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C I puntatori 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano Gestione della memoria p. 1/11 Programmazione Laboratorio Roberto Cordone DI - Università degli Studi di Milano Tel. 02 503 16235 E-mail: roberto.cordone@unimi.it Ricevimento: su appuntamento Lezioni:

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

14 - Metodi e Costruttori

14 - Metodi e Costruttori 14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Strutture dati e loro organizzazione. Gabriella Trucco

Strutture dati e loro organizzazione. Gabriella Trucco Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi

Dettagli

La struttura dati LISTA

La struttura dati LISTA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati LISTA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una lista è una struttura dati astratta che rappresenta

Dettagli

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi Complementi sul C - 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Precedenza e associatività () [] ->. S D! ~ ++ + * & (cast ) sizeof S D * / % S D + - (somma e sottrazione) S D >

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli