Gestione dinamica della memoria
|
|
|
- Alice Emilia Scarpa
- 8 anni fa
- Visualizzazioni
Transcript
1 Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A Gestione dinamica della memoria Pietro Di Lena - [email protected] A pessimistic programmer sees the array as half empty. An optimistic programmer sees the array as half full. A Real Programmer sees the array as twice as big as it needs to be and calls realloc().
2 Introduzione Parliamo di allocazione della memoria quando un blocco di memoria (RAM) viene assegnata ad un programma in esecuzione. In C abbiamo tre classi di allocazione delle memoria: Allocazione automatica. Riguarda le variabili (non static) con scope locale. La memoria viene automaticamente allocata sullo stack (record di attivazione) e automaticamente deallocata (rilasciata) al termine dell esecuzione della funzione in cui la variabile è dichiarata. Allocazione statica. Riguarda le variabili globali e le variabili locali dichiarate static. La memoria viene allocata nel data segment e viene rilasciata al termine dell esecuzione del programma. Allocazione dinamica. Riguarda memoria richiesta a run-time esplicitamente dal programmatore. E necessario utilizzare opportune funzioni di libreria per richiedere memoria. Il blocco di memoria richiesto viene allocato sullo heap. Deve essere esplicitamente rilasciata dal programmatore. L unico modo per poter accedere alla memoria allocata dinamicamente è tramite puntatori. Vediamo adesso come gestire dinamicamente la memoria in un programma C.
3 Funzioni di libreria per la gestione dinamica della memoria I prototipi delle funzioni per la gestione dinamica della memoria sono dichiarati nel file header stdlib.h. Abbiamo tre aspetti legati alla gestione dinamica della memoria. Allocazione della memoria Funzioni di allocazione: malloc(), calloc() Allocano un generico blocco di byte contigui sull heap. Restituiscono un puntatore void * al primo byte del blocco o NULL se l allocazione non è possibile. L unica possibilità per utilizzare la memoria allocata è tramite puntatore. Deallocazione della memoria Funzione di deallocazione: free(). Rlascia memoria allocata tramite malloc(), calloc() o realloc(). La memoria rilasciata può essere utilizzata per eventuali nuove allocazioni. Modifica della dimensione di memoria Funzione di modifica della dimensione: realloc(). Permette di modificare la dimensione di memoria allocata precedentemente. Permette sia di diminuire che aumentare la dimensione.
4 Allocazione dinamica della memoria Le due funzioni 1 void * malloc ( size_t size ); 2 3 void * calloc ( size_t nmemb, size_t size ); consentono di allocare un blocco contiguo di memoria di dimensione rispettivamente size e nmemb*size byte. L unica differenza tra le due funzioni consiste nel fatto che la calloc() inizializza i bit della memoria allocata a zero. Restituiscono un puntatore void * al primo byte del blocco di memoria. E necessario un cast sul puntatore per poter utilizzare la memoria. Se la memoria non può essere allocata, restituiscono NULL. E sempre opportuno eseguire un check di controllo. Grazie alla equivalenza tra array e puntatori, possiamo accedere alla memoria allocata dinamicamente come se fosse un array.
5 Allocazione dinamica della memoria: esempi 1/2 Esempio di utilizzo basilare: allochiamo spazio di memoria per un int. 1 // Allochiamo 4 byte 2 int *p = malloc (4); 3 *p = 10; 1 // Allochiamo sizeof ( int ) byte 2 int *p = ( int *) malloc ( sizeof ( int )); 3 *p = 10; Nel primo esempio, il cast viene effettuato in modo implicito al tipo int *: è preferibile utilizzare un cast esplicito. Inoltre, se sizeof(int) > 4, il comportamento è non definito. Il secondo esempio mostra la modalità corretta di utilizzo. Come allocare un array di int di dimensione variabile. 1 unsigned int n, i; 2 int i, * list ; 3 4 scanf ("%u",&n); 5 6 // Allochiamo un array che possa contenere n int 7 list = ( int *) malloc (n* sizeof ( int )); 8 9 if( list!= NULL ) 10 // Inizializziamo l array 11 for (i =0; i<n; i ++) list [i]=i; Possiamo aggirare le limitazioni del tipo di dato array: la dimensione dell array può essere variabile e decisa in fase di esecuzione del programma.
6 Allocazione dinamica della memoria: esempi 2/2 Possiamo utilizzare la memoria dinamica per allocare array di strutture. 1 # include <stdlib.h> 2 3 struct person { 4 char * name ; 5 int age ; 6 double height ; 7 double weight ; 8 }; 9 10 struct person * alloc_list ( size_t n) { 11 struct person * tmp ; 12 tmp = ( struct person *) calloc (n, sizeof ( struct person )); 13 if ( tmp!= NULL ) { // Inizializziamo i campi 14 size_t i; 15 for (i =0; i<n; i ++) { 16 tmp [i]. name = NULL ; 17 tmp [i]. age = -1; 18 tmp [i]. height = -1; 19 tmp [i]. weight = -1; 20 } 21 } 22 return tmp ; 23 } La funzione alloca, inizializza e restituisce un puntatore ad un array di n elementi di tipo struct person. Restituisce NULL se l allocazione non ha avuto successo.
7 Deallocazione della memoria La funzione 1 void free ( void * ptr ); consente di rilasciare la memoria allocata dinamicamente. La memoria deallocata ritorna disponibile per eventuali nuove allocazioni. Se ptr punta a NULL, la free() non fa nulla. Se ptr non è un puntatore valido, cioè se non punta ad un indirizzo di memoria ritornato precedentemente da una chiamata di malloc(), calloc(),realloc() o se la memoria puntata da ptr è stata precedentemente deallocata, il comportamento è non definito. E buona norma liberare la memoria allocata dinamicamente quando non è più necessaria. A differenza di altri linguaggi di programmazione, il linguaggio C non dispone di un garbage collector. Se perdiamo il riferimento (indirizzo del primo byte) alla memoria allocata, non saremo più in grado di accedervi e questa resterà inutilizzabile (garbage) per tutta la durata del programma.
8 Deallocazione della memoria: esempio Vediamo come liberare la memoria allocata dinamicamente per l array di struct person definito precedentemente. 1 void free_list ( struct person *ptr, size_t n) { 2 if ( ptr!= NULL ) { 3 struct person * tmp = ptr ; 4 size_t i; 5 6 for (i =0; i<n; i ++) 7 free ( ptr [i]. name ); 8 free ( tmp ); 9 } 10 } Notiamo che prima di liberare la memoria puntata da ptr (salvato in tmp) è necessario scorrere l intero array e liberare la (eventuale) memoria puntata dal campo name nella struttura. Assumiamo implicitamente che l array di caratteri del nome sia allocato dinamicamente durante l esecuzione del programma (oppure punti a NULL). Se non eseguiamo questo passaggio, la memoria puntata dal campo name resterà allocata e inutilizzabile (garbage) per l intero tempo di vita del programma dopo la chiamata a free list()
9 Modifica della dimensione di memoria La funzione 1 void * realloc ( void *ptr, size_t size ); consente di modificare la dimensione della memoria puntata da ptr nella dimensione specificata da size. Possiamo sia aumentare che diminuire la dimensione del blocco puntato da ptr. Se ptr è NULL, la realloc() si comporta come la malloc(). Se ptr non punta ad un indirizzo di memoria valido, il comportamento è non definito. Se ptr punta ad un indirizzo valido e la dimensione specificata è minore della precedente, la funzione ritorna ptr. Se ptr punta ad un indirizzo valido e la dimensione specificata è maggiore della precedente, la funzione potrebbe: ritornare ptr, se è possibile estendere in modo contiguo la memoria, ritornare un nuovo indirizzo di memoria (il blocco di memoria puntato da ptr viene ricopiato nella nuova locazione), ritornare NULL se non è possibile allocare contiguamente al memoria richiesta (il blocco di memoria puntato da ptr resta invariato). Se ptr punta ad un indirizzo valido e size è 0, la realloc() equivale alla free().
10 Modifica della dimensione di memoria: esempio Vediamo come estendere dinamicamente l array di struct person. 1 int extend_list ( struct person ** ptr, size_t old_size, size_t new_size ) { 2 struct person * tmp = NULL ; 3 4 if (* ptr!= NULL && old_size < new_size ) 5 tmp = realloc (* ptr, new_size * sizeof ( struct person )); 6 7 if( tmp!= NULL ) { // Memoria allocata 8 size_t i; 9 for (i= old_size ; i< new_size ; i++) { // Inizializziamo i nuovi elementi 10 tmp [i]. name = NULL ; 11 tmp [i]. age = -1; 12 tmp [i]. height = -1; 13 tmp [i]. weight = -1; 14 } 15 * ptr = tmp ; // Aggiorniamo il puntatore al primo elemento 16 } 17 return tmp!= NULL ; // Estensione effettuata se tmp!= NULL 18 } Questa implementazione permette unicamente di estendere la dimensione dell array: se la nuova dimensione è minore della precedente, la funzione non esegue nulla. Ritorna 0 se l estensione è stata effettuata, 1 altrimenti. Passiamo alla funzione l indirizzo del puntatore all array, non l indirizzo dell array: in questo modo possiamo modificare direttamente nella funzione il puntatore all array, nel caso in cui la realloc() abbia spostato il tutto in una nuova locazione di memoria.
11 Esempio: allocazione dinamica di matrici 1/4 Come possiamo allocare dinamicamente una matrice di int di dimensione generica? Approccio tramite array (dinamico) di puntatori ad unico array (dinamico) di int. m array di puntatori ad int array di int m[0] m[0][0] m[0][1] m[1][0] m[1][1] m[2][0] m[2][1] m[1] m[2] Approccio tramite array (dinamico) di puntatori a molteplici array (dinamici) di int. m array di puntatori ad int array di int m[0] m[0][0] m[0][1] m[1] m[1][0] m[1][1] m[2] m[2][0] m[2][1] La funzione di allocazione ritorna il puntatore m. Qual è il tipo puntato da m?
12 Esempio: allocazione dinamica di matrici 2/4 Approccio tramite array di puntatori ad unica lista di int. Implementazione base della funzione di allocazione: non controlliamo se la memoria sia stata effettivamente allocata. 1 int ** int_matrix_alloc ( size_t row, size_t col ) { 2 int **m; 3 size_t i; 4 5 m = ( int **) malloc ( row * sizeof ( int *)); // Array di int * 6 m [0] = ( int *) calloc ( row *col, sizeof ( int )); // Array di int 7 8 for (i = 1; i < row ; i ++) // Settiamo i puntatori alle celle 9 m[i] = &m [0][ i* col ]; // Equivalente a: *m+i* col return m; 12 } Per deallocare la matrice è sufficiente conoscere l indirizzo dell array di puntatori. 1 void int_matrix_free ( int ** m) { 2 if(m!= NULL ) 3 free (m [0]); // Deallochiamo l array di int 4 free (m); // Deallochiamo l array di int * 5 }
13 Esempio: allocazione dinamica di matrici 3/4 Approccio tramite array di puntatori a differenti liste di int. Implementazione base della funzione di allocazione: non controlliamo se la memoria sia stata effettivamente allocata. 1 int ** int_matrix_alloc ( size_t row, size_t col ) { 2 int **m; 3 size_t i; 4 5 m = ( int **) malloc ( row * sizeof ( int *)); // Array di int * 6 7 for (i = 0; i < row ; i ++) 8 m[i] = ( int *) calloc (col, sizeof ( int )); // Array di int 9 10 return m; 11 } Per deallocare la matrice è necessario conoscere il numero di righe 1 void int_matrix_free ( int **m, size_t row ) { 2 if(m!= NULL ) { 3 size_t i; 4 for (i = 0; i < row ; i ++) 5 free (m[i ]); // Deallochiamo gli array di int 6 } 7 free (m); // Deallochiamo l array di int * 8 }
14 Esempio: allocazione dinamica di matrici 4/4 Indipendentemente dalla scelta implementativa, possiamo accedere agli elementi della matrice utilizzando la notazione array. Funzione di inizializzazione di una matrice bidimensionale di dimensione generica. 1 void int_matrix_init ( int **m, size_t row, size_t col, int init ) { 2 size_t i, j; 3 4 for (i = 0; i < row ; i ++) 5 for (j = 0; j < col ; j ++) 6 m[i][ j] = init ; 7 } Funzione di stampa di una matrice bidimensionale di dimensione generica. 1 void int_matrix_print ( int **m, size_t row, size_t col ) { 2 size_t i, j; 3 4 for (i = 0; i < row ; i ++) { 5 for (j = 0; j < col ; j ++) 6 printf ("%d ",m[i][j]); 7 printf ("\n"); 8 } 9 }
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;
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
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
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
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 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=
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
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
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
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;
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
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
Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Proff. Francesco Cutugno e Luigi Lamberti 2009 Cenni sui Processi Si definisce Programma un insieme di Istruzioni destinate
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
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
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
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
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/
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
Spazio di indirizzamento virtuale
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - [email protected] // The function name says it all int stack_overflow (){
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
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
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
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));
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
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
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
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
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
I PUNTATORI USO AVANZATO. Manuale linguaggio C
I PUNTATORI USO AVANZATO Manuale linguaggio C Allocazione dinamica della memoria Possibilità di allocare la memoria durante l esecuzione di un programma, per progettare strutture dati che crescano o si
PUNTATORI. Ivan Lanese
PUNTATORI Ivan Lanese Argomenti Puntatori Liste Puntatori Un puntatore è un tipo di dato che contiene l'indirizzo di memoria di un altro tipo di dato In c+o i puntatori sono tipati: avremo puntatori a
Le operazioni di allocazione e deallocazione sono a carico del sistema.
Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione
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)
I puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria Allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 Allocazione dinamica
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
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
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
La Gestione della Memoria. Carla Binucci e Walter Didimo
La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina
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
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
Gestione della Memoria
Gestione della Memoria Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 27 apr, 2016 Sommario 1 Tecniche di gestione Progetto della gestione
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
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
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
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
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
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
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
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;
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 3 - Array 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
I puntatori e l allocazione dinamica di memoria. Esercizi risolti
I puntatori e l allocazione dinamica di memoria Esercizi risolti 1 Esercizio Si vuole realizzare un tipo struct, utilizzato per informazioni su operazioni di vendita, avente i seguenti campi: codice: numero
puntatori Lab. Calc. AA 2007/08 1
puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene
