Il linguaggio C. Puntatori e dintorni
|
|
|
- Veronica Garofalo
- 8 anni fa
- Visualizzazioni
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
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;
Gestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - [email protected] A pessimistic programmer sees the array as half empty.
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;
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
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
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
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
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
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
L'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego [email protected] http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
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
Lezione 19 e Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe
Lezione 19 e 20 - Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe Valentina Ciriani (2005-2008) Laboratorio di programmazione Valentina Ciriani
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
Esercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
C: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
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
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
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=
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
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
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
Allocazione 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
L Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania [email protected] http://www.diit.unict.it/users/mpalesi Sommario Questo documento
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
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
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
Esercizi. La funzione swapint() primo tentativo
Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include
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
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
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
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
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
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)
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
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
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 [email protected] HTTP://WWW.DII.UNISI.IT/~RIGUTINI/
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
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
La struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - [email protected] Introduzione Una coda (o queue) è una struttura dati astratta
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));
Lezione 8 Struct e qsort
Lezione 8 Struct e qsort Rossano Venturini [email protected] Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort
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
Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
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
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
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
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
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
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
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:
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
