Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori
|
|
|
- Guglielmo Cosentino
- 9 anni fa
- Просмотров:
Транскрипт
1 Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 A.A. 2010/2011 Docente: Gian Luca Marcialis Sommario Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori Vettori dinamici LINGUAGGIO C Puntatori e vettori dinamici (cenni) 2 Il tipo puntatore Puntatori e tipi semplici Il tipo puntatore è definito sull intero supporto degli indirizzi di memoria allocabile Può dunque assumere uno tra i possibili valori e tale valore corrisponde ad un indirizzo di memoria L indirizzo di memoria puntato può essere riferito ad un tipo semplice o strutturato Per dichiarare una variabile di tipo puntatore, si fa seguire il tipo di riferimento (semplice o strutturato) di appartenenza Un puntatore che contiene l indirizzo di una variabile intera si dichiara così: int* p; Se, ad esempio, nel codice è stata dichiarata una variabile intera a, l indirizzo di a può essere assegnato a p: p = &a; Il procedimento è analogo per un puntatore al tipo char, unsigned int e così via 3 4
2 Visione nella macchina virtuale C Allocazione di un puntatore Lo stato della macchina virtuale C dopo l assegnamento di &a a p CPU 12 &a Bus di sistema &a &p Locazioni libere Standard Input Standard Output Quando si dichiara una variabile di tipo puntatore (associata ad un tipo semplice o strutturato), come per una variabile normale, il suo contenuto è qualunque, e può essere anche quello di un area di memoria non consentito E dunque necessaria un operazione addizionale di allocazione, che corrisponde ad assegnare alla variabile puntatore un valore consentito In ogni caso, prima di utilizzare un puntatore, è sempre meglio far seguire la dichiarazione con un assegnamento ad un valore costante NULL, che indica locazione non assegnata : p=null; 5 6 Allocazione : la funzione malloc Assegnamento di un valore intero puntato Per allocare un puntatore si richiama la funzione di libreria malloc() presente nella libreria stdlib.h (e alloc.h) Nel seguito dichiarazione: tale operazione viene svolta subito dopo la p=(int*)malloc(sizeof(int)); La funzione malloc restituisce l indirizzo ad un area di memoria di estensione pari al parametro in ingresso, in questo caso corrispondente all estesione di una varaibile intera (sizeof(int)) Il tipo a cui è assegnato l indirizzo dev essere lo stesso della variabile p, per questo motivo il cast di uscita della funzione viene forzato a int* A questo punto, possiamo dire, ad esempio, che all indirizzo p, appena assegnato, è contenuto il valore 12: *p = 12; /*l asterisco indica il contenuto della locazione di indirizzo p*/ Facendo precedere dall asterisco, possiamo utilizzare una variabile puntatore come le variabili note di tipo semplice: *p3 = *p1 + *p2; /* somma i contenuti delle locazioni p1 e p2 e li memorizza nella locazione p3 */ Naturalmente, nell esempio di cui sopra, p1, p2 e p3 sono già state allocate separatamente con malloc 7 8
3 Esercizio Deallocazione di un puntatore Indicare quale sarà il valore finale stampato dal seguente programma C: /*Programma*/ #include <stdio.h> #include <stdlib.h> int main() int a; scanf( %d,&a); p=&a; printf( \n%d\n,*p); return 0; Se una variabile puntatore non ci serve più, ed era stato allocato con malloc, prima di uscire dal codice, sia esso una funzione od il programma principale, l area di memoria assegnata al puntatore dev essere liberata con la funzione free() free(p); In questo modo, quell area potrà essere utilizzata da altre variabili, che, come noto, necessitano di occupare una zona di memoria 9 10 Allocazione di un vettore tramite puntatori Esercizio Per allocare un vettore di N elementi interi: int* vettore; vettore=(int*)malloc(sizeof(int)*n); Da questo momento, il vettore è trattabile come quelli che abbiamo imparato ad usare nel corso: Per l accesso alla i-esima componente si scrive: vettore[i] In alternativa si scrive: *(vettore+i) somma l indirizzo iniziale (vettore), alla posizione della variabile da estrarre (i) e poi, con l operatore *, la estrae Scrivere vettore[i] o *(vettore+i) non fa alcuna differenza Se il vettore non ci serve più, possiamo deallocarlo : free(vettore); 11 Scrivere una funzione C che, ricevendo in ingresso una variabile intera N, restituisca un vettore di N elementi, allocato dinamicamente, che contenga nella posizione i-esima le somme cumulative da 0 a i In altri termini, chiamando v il vettore: v[ i] = Scrivere un programma C che, ricevendo da tastiera un intero N, stampi a video le somme cumulative di cui sopra i j= 0 j 12
4 Funzione somme Vista top-down int* somme(int N) int *v, i; v=(int*)malloc(sizeof(int)*n); v[0]=0; for(i=1; i<n; i++) v[i]= i + v[i-1]; return v; Leggi N Programma Calcola v Stampa v Funzioni leggi e stampa Programma principale int leggi(void) int N; scanf( %d,&n); return N; void stampa(int *v, int N) int i; for(i=0; i<n; i++) printf( %d,v[i]); return; /*Programma per la stamma dei valori sum_j(j) dato in ingresso un intero N*/ #include <stdio.h> #include <stdlib.h> int* main() int *v, N; N=leggi(); v=somme(n); stampa(v,n); /*free(v); /*prima di uscire, bisogna deallocare il vettore!!!! */ return v; 15 16
5 Passaggio per variabile e puntatori Esercizio Scrivere una funzione che, ricevendo due valori interi, assegnati alle variabili a e b, scambi i contenuti delle due variabili Sappiamo già risolvere l esercizio passando a e b per variabile. Ora sappiamo cosa significa l uso del carattere * per indicare tale passaggio: void swap(int *a, int *b) int temp; temp=*a; *a=*b; *b=temp; Scrivere una funzione C occorrenze che, ricevendo in ingresso un vettore di N elementi interi v, ed un intero x, restituisca un altro vettore, w, allocato dinamicamente, che contenga tutti gli indici di v in corrispondenza dei quali occorre x. Si allochi w con N posizioni Vincoli: (1) Se il numero di occorrenze è inferiore ad N, si assegni all ultimo componente utile il valore -1 per indicare che non sono state trovate altre occorrenze del valore cercato (2) La funzione restituisce NULL se (2.1) non è stato trovato spazio in memoria per allocare w (2.2) nessuna occorrenza di x compare in v Esempio: Se v=1, 3, 5, 1, 10, 5, con N=6, e x=1 w=0, 3, -1 ma w è comunque allocato per N=6 elementi Con gli stessi v ed N, ma x = 6 w = NULL Soluzione int* occorrenze(int* v, int N, int x) int i, j, *w; w=(int*)malloc(sizeof(int)*n); if(w==null) return NULL; /*vincolo 2.1*/ i=0; j=0; while(i<n) if(v[i]==x) w[j]=i; j++; i++; Per saperne di più Ceri, Mandriola, Sbattella, Informatica arte e mestiere, Capp. 5, 10, McGraw-Hill Kernighan, Ritchie, Il linguaggio C, Cap. 5, Pearson- Prentice Hall if(j==0) free(w); w=null; /*vincolo 2.2*/ else if(j<n) w[j]=-1; /*vincolo 1*/ return w; 19 20
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
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;
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
Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Elettrica, e Meccanica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
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.
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
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
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
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
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
Esercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
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
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
Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi
Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi [email protected] Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)
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
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
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
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
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
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
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
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=
Primi passi col linguaggio C
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta
Struttura dei programmi C
Programmi C Struttura dei Programmi C Dichiarazione delle variabili Operazioni di Ingresso/Uscita Fondamenti di Informatica 1 Struttura dei programmi C Un programma C deve contenere, nell'ordine: una parte
Linguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
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
ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
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
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
Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
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
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
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti
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
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
Algoritmi e basi del C Struttura di un programma
Algoritmi e basi del C Struttura di un programma Marco D. Santambrogio [email protected] Ver. aggiornata al 17 Marzo 2015 Compitini Compitini di INFO: 24 Aprile 2015 4.15pm @ C.G.1 (Ed. 9) 21
File e puntatori a file
File e puntatori a file Vitoantonio Bevilacqua [email protected] La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di
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
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
Istruzioni iterative (o cicliche)
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Istruzioni iterative (o cicliche) Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria
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
Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C
Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani ([email protected])
ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C strutture di controllo: strutture iterative Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Strutture iterative
1 (6) 2 (7) 3 (7) 4 (7) 5 (6)
CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B anno accademico 010-011 Prof. Danilo ARDAGNA Seconda Prova in Itinere 7.06.011 Durata 1h 30 Valutazioni 1 (6) (7) 3 (7) 4 (7)
