Mini-dispensa sui puntatori in C
|
|
- Angela Chiara Boni
- 7 anni fa
- Visualizzazioni
Transcript
1 Mini-dispensa sui puntatori in C P. Zavarise Versione 1 ottobre 013 1
2 Valore e indirizzo di una variabile Ripassiamo il significato di dal punto di vista del programmatore. int a=; Viene creata una variabile di tipo int chiamata a che varrà. Ossia, viene creata una scatola in memoria chiamata a, della grandezza giusta in bytes per contenere un int (tipicamente 4 bytes sui processori moderni). Supponiamo che la scatola occupi gli indirizzi contigui di memoria che battezzeremo (appunto, 4 bytes). Il contenuto della scatola si chiama valore della variabile (Domanda: Quanto vale a? Risposta: ). La posizione della scatola nella memoria (per la precisione, del primo byte) si chiama indirizzo della variabile. (Domanda: Dove si trova a nella memoria? Risposta: all indirizzo 1345). int,4 bytes a è simpatico, ma poco realistico come indirizzo di memoria. Vedremo in seguito come si ricava l indirizzo di una variabile, che aspetto ha, e come si possa lavorare con gli indirizzi.
3 Indirizzo di una variabile. Operatori & e Come si ottiene l indirizzo di una variabile? Attraverso l operatore &, che va messo davanti al nome della variabile. &a restituisce l indirizzo della variabile a (e viene infatti chiamato operatore indirizzo). Ma che tipo restituisce questo operatore? E un numero? E una stringa? Che roba è? &a restituisce un puntatore, e per essere precisi un puntatore a una variabile int, perché a è di tipo int. Un puntatore a una variabile di tipo int viene indicato con int *, dove * non ha nulla a che fare con la moltiplicazione. Il valore di una variabile di tipo int * è quindi l indirizzo di memoria di una variabile di tipo int. Viceversa, se ho una variabile di tipo int *, come recupero il valore della variabile a cui fa riferimento? Attraverso l operatore *. (*(&a)) è equivalente ad a. * è l operatore inverso di &, e viene chiamato operatore dereferenza. 3 int main () { 4 int a =; 5 int *b=&a; 6 printf ("%d\n", a); 7 printf ("%d\n", *b); 8 printf ("%d\n", *(& a)); 9 } Output: Nell esempio, b è una variabile di tipo int *, ossia un puntatore a una variabile di tipo int. *b è una variable di tipo int, ed è la variabile puntata da b, ossia a. b int,sizeof (int ) &a &b int,4 bytes b a &a Un puntatore puo anche non puntare a niente, e questo si ottiene scrivendo b=null oppure b=0. 3
4 Visualizzazione e dimensioni di un puntatore 3 int main () { 4 int a =; 5 int * b=&a; 6 7 printf ("%d\n", a); 8 printf ("%p\n", ( void *)b); 9 10 int dimensionedia = sizeof (a); 11 printf ("%d\n", dimensionedia ); 1 int dimensionedib = sizeof (b); 13 printf ("%d\n", dimensionedib ); 14 } Output (64bit): 0x7fff79a300c 4 8 Output (3bit): 0xffde335c 4 4 Chiaramente questi output sono possibili : gli indirizzi delle variabili potrebbero variare ad ogni esecuzione del programma. Notiamo che per visualizzare una variabile puntatore con printf si usa %p. Secondo lo standard C più moderno, il puntatore nel printf deve subire un casting (void*) puntatore di tipo indefinito, altrimenti il compilatore scriverà un warning. Notiamo che printf scriverà un espressione esadecimale il cui significato preciso non ci interessa, dipende da un sacco di cose. Quello che ci interessa è che se il programma è compilato a 64 bit, la dimensione del puntatore è 8 byte=64 bit, mentre se è compilato a 3 bit, la dimensione del puntatore è 4 byte=3 bit. Se avete più di 4 GB di RAM sul computer, state probabilmente usando Windows a 64 bit. Con 3 bit infatti si indirizzano 3 bytes=4 GB, il resto della memoria sarebbe inutilizzato. 4
5 Vettori e puntatori Vediamo come si dispongono in memoria gli elementi di un vettore. 3 int main () { 4 int vettore [3]={0,1,}; 5 printf ("%d %p\n", vettore [0], ( void *) (&( vettore [0]) )); 6 printf ("%d %p\n", vettore [0+1], ( void *) (&( vettore [0+1]) )); 7 printf ("%d %p\n\n", vettore [0+], ( void *) (&( vettore [0+]) )); 8 printf ("%d %p\n", *(&( vettore [0]) ), ( void *) (&( vettore [0]) )); 9 printf ("%d %p\n", *(&( vettore [0]) +1), ( void *) (&( vettore [0]) +1) ); 10 printf ("%d %p\n\n", *(&( vettore [0]) +), ( void *) (&( vettore [0]) +) ); 11 int * a=&( vettore [0]) ; 1 printf ("%d %p %d\n", a[0], &(a [0]) ); 13 printf ("%d %p %d\n", a [0+1], &(a [1]) ); 14 printf ("%d %p %d\n", a [0+], &(a []) ); 15 } Possibile output: 0 0xfff4fb54 1 0xfff4fb58 0xfff4fb5c 0 0xfff4fb54 1 0xfff4fb58 0xfff4fb5c 0 0xfff4fb54 1 0xfff4fb58 0xfff4fb5c Dalle prime 3 righe dell output, è chiaro che gli indirizzi corrispondenti a elementi consecutivi del vettore sono distanti 4 bytes, perché un int occupa 4 bytes. Dalle seconde 3 righe, si vede cosa succede aggiungendo un numero n a un puntatore. Questo viene modificato di n sizeof (int), ossia 4*n. Ossia &(vettore[0])+1=&(vettore[1]). Insomma, tornando all esempio, &(vettore[0])+1 non fa 0xfff4fb55, ma fa 0xfff4fb58. E per questo che i puntatori contengono l informazione del tipo della variabile a cui si riferiscono (ad esempio, int *): per poter fare questo tipo di operazioni. Infine le ultime tre righe. I puntatori supportano l operatore [] tipico dei vettori! Dato int* a, avremo a[0]=*a, a[1]=*(a+1), a[]=*(a+)... In questo caso, tutto sembra sensato perché a[0] è l inizio di un vettore, ma attenzione, questo formalismo funziona in generale! 5
6 Investigare la memoria Applicazione. Sappiamo che un int, facciamo unsigned per semplicità, occupa 4 bytes. Dati alcuni interi, investighiamo il valore dei 4 bytes che descrivono l intero in memoria. 3 void visualizza ( unsigned int valore ) { 4 unsigned char * indirizzo =( unsigned char *)& valore ; 5 printf (" %10u ---> %3u %3u %3u %3u ---> %10u\n", valore, indirizzo [0], indirizzo [1], indirizzo [], indirizzo [3], indirizzo [0]+56* indirizzo [1]+56*56* indirizzo []+56*56*56* indirizzo [3]) ; 6 } 7 8 int main () { 9 unsigned int esempi []={0, 1, 56, 65536, , }; 10 for ( int contatore =0; contatore <6; contatore ++) { 11 visualizza ( esempi [ contatore ]); 1 } 13 } Output (su architettura x86): 0 ---> > > > > > > > > > > > Abbiamo preso l indirizzo della variabile valore, e lo abbiamo trasformato da (unsigned int*) a (unsigned char*). Questo ci ha permesso di guardare un byte alla volta. Le architetture x86 e x86-64 sono Little Endian, che significa che i bytes meno significativi, quelli pesati per una potenza di 56 più piccola, sono messi prima in memoria. 6
7 Passaggio di valori alle funzioni Tutti voi sapere passare valori alle funzioni. Vediamo di approfondire. 3 void calcolasuccessivo ( int parametro ) { 4 parametro=parametro +1; 5 printf ("%d\n", parametro ); 6 } 7 8 int main () { 9 int a =1; 10 printf ("%d\n", a); 11 calcolasuccessivo (a); 1 printf ("%d\n", a); 13 } Output: 1 1 1) Quando viene chiamata la funzione, viene creata una variabile parametro nella memoria. Nella variabile parametro viene copiato il valore della variabile a ) La variabile parametro viene alterata all interno della funzione. 3) Quando termina la funzione, la variabile parametro viene distrutta. Il contenuto della variabile a non viene toccato, e quindi l ultimo numero scritto sarà 1. Alla funzione abbiamo passato il valore della variabile a, e solo il valore, che viene copiato nella variabile parametro. 7
8 Passaggio di riferimenti alle funzioni Vediamo ora qualcosa di quasi nuovo 3 void calcolasuccessivo (int * parametro ) { 4 * parametro=* parametro +1; 5 printf ("%d\n", * parametro ); 6 } 7 8 int main () { 9 int a =1; 10 printf ("%d\n", a); 11 calcolasuccessivo (&a); 1 printf ("%d\n", a); 13 } Output: 1 1) Quando viene chiamata la funzione, viene creata una variabile parametro nella memoria, che contiene un valore di tipo int*. ) Nella variabile parametro viene copiato il valore &a, ossia l indirizzo della variabile a. 3) Viene modificato il valore della variabile puntata dalla variabile parametro, ossia il valore della variabile a. 4) Quando termina la funzione, viene distrutta la variabile parametro. Il valore della variabile a è stato modificato! Quindi l ultimo numero scritto sarà. Alla funzione abbiamo passato l indirizzo della variabile a! Già conoscevamo l esempio di scanf( %d, &a). Se si vuole che le funzioni restituiscano informazioni, o le si mette nella variabile di ritorno della funzione (return...), oppure si passa alla funzione gli indirizzi delle variabili che la funzione deve modificare. 8
9 Passaggio di array alle funzioni, 1/ 3 void riempivet ( int vet [], int dim ) { 4 for ( int i =0; i<dim ; i ++) { 5 vet [i]=i; 6 } 7 printf ("4) %d\n", ( int ) sizeof ( vet )); 8 printf ("5) %p %p\n", ( void *)&vet, ( void *) vet ); 9 printf ("6) %p\n", ( void *) &( vet [0]) ); 10 } 11 1 void scrivivet ( int vet [], int dim ) { 13 for ( int i =0; i<dim ; i ++) { 14 printf ("%d", vet [i]); 15 } 16 printf ("\n"); 17 printf ("7) %d\n", (int ) sizeof (vet )); 18 printf ("8) %p %p\n", ( void *)&vet, ( void *) vet ); 19 printf ("9) %p\n", ( void *) &( vet [0]) ); 0 } 1 int main () { 3 int n =5; 4 int miovet [5]; 5 printf ("1) %d\n", (int ) sizeof ( miovet )); 6 printf (") %p\n", ( void *)& miovet ); 7 printf ("3) %p\n", ( void *) &( miovet [0]) ); 8 riempivet ( miovet, n); 9 scrivivet ( miovet, n); 30 } Avrete probabilmente già visto un esempio di questo tipo. Allochiamo un vettore di interi avente dimensione 5, e riempiamolo con i numeri da 0 a 4. Mettiamo qualche printf sparso per capire cosa succede. Possibile output: 1) 0 ) 0xfff33f9c 3) 0xfff33f9c 4) 4 5) 0xfff33f80 0xfff33f9c 6) 0xfff33f9c ) 4 8) 0xfff33f80 0xfff33f9c 9) 0xfff33f9c 9
10 Passaggio di array alle funzioni, / In generale, dovreste avere esperienza che i valori dell array passato alle funzioni vengono alterati dalle funzioni tipo riempivet, e questo già vi dovrebbe far sospettare che c entri un passaggio di indirizzi. Vediamo di capire l output precedente. 1) Nel main, abbiamo creato miovet, che ha dimensione 0 (5 interi da 4 bytes, sizeof applicato ad un array funziona in questo modo). -3) L indirizzo di miovet è lo stesso dell indirizzo del primo elemento del vettore, ossia di miovet[0]. 4) Abbiamo passato il vettore alla funzione riempivet. Notiamo però che vet ha dimensione 4, e questo ci fa gia sospettare che si tratti di un puntatore. 5) La conferma arriva dalla riga 5. L indirizzo di vet è nuovo, ossia è stata creata una nuova variabile di tipo int*, chiamata vet, che contiene l indirizzo di miovet[0]. 6) vet[0] mostra lo stesso indirizzo di miovet[0], quindi cambiando vet cambia anche miovet. *vet e equivalente a vet[0]. 7-9) Considerazioni analoghe a 4-6. Sostanzialmente, il concetto è che quando si passa un array, quello che viene passato è l indirizzo del primo elemento. 10
11 Esempio facilissimo sui puntatori Due esempi di realizzazione di una funzione somma di due numeri. A sinistra è banale, a destra il risultato viene memorizzato nella variabile all indirizzo passato in input. 3 int somma ( int v1, int v) { 4 return v1+v; 5 } 6 7 int main () { 8 int a=1, b =; 9 printf (" apiub =%d\n", somma (a, b)); 10 } 3 void somma ( int v1, int v, int * risultato ) { 4 * risultato =v1+v; 5 } 6 7 int main () { 8 int a=1, b =; 9 int apiub ; 10 somma (a, b, & apiub ); 11 printf (" apiub =%d\n", apiub ); 1 } Output: 3 11
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;
DettagliVerso i puntatori: Cosa è una variabile?
Verso i puntatori: Cosa è una variabile? Quando si dichiara una variabile, ad es. int a; si rende noto il nome e il tipo della variabile. Il compilatore alloca l opportuno numero di byte di memoria per
DettagliPuntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a
Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime
DettagliPOINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.
POINTERS Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. Es. Sia y una variabile intera di valore e sia yptr una variabile pointer avente come valore l indirizzo di y.
DettagliI puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.
Puntatori I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. NOTA: quando un programma viene mandato in esecuzione, ad esso viene assegnata un area di memoria di lavoro
DettagliIntroduzione 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
DettagliRiprendiamo l esercizio calcolatrice
Riprendiamo l esercizio calcolatrice Scrivere un programma calcolatrice che legga da tastiera due variabili intere a e b, poi Stampi un menu con un valore numerico associato a quattro operazioni possibili:
DettagliPuntatori. 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
DettagliLinguaggio 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
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliLezione 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
DettagliEsercizi su. Istruzioni di scelta multipla. Overflow
Esercizi su Istruzioni di scelta multipla Overflow 2 Scelta multipla 3 Esercizio 1/2 Scrivere un programma che chieda all'utente di scegliere tra varie opzioni e stampi il nome dell'opzione scelta Esempio
DettagliIL PRIMO PROGRAMMA IN C
IL PRIMO PROGRAMMA IN C LO SCOPO Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video SOLUZIONE
DettagliPuntatori. Fondamenti di Programmazione
Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliInside 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
DettagliAllocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
DettagliAritmetica dei puntatori
Aritmetica dei puntatori Sui puntatori si possono anche effettuare operazioni aritmetiche, con opportune limitazioni somma o sottrazione di un intero sottrazione di un puntatore da un altro Somma e sottrazione
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
DettagliStringhe 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
DettagliPuntatori (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
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
DettagliArray. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali
MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliNon 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
DettagliIntroduzione 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
DettagliLezione 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
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
DettagliTipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010
Tipi di dati scalari (casting e puntatori) Alessandra Giordani agiordani@disi.unitn.it Lunedì 10 maggio 2010 http://disi.unitn.it/~agiordani/ I tipi di dati scalari I tipi aritmetici, i tipi enumerativi
DettagliFunzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti
Funzioni di I/O per numeri 2 Input e output di valori numerici Ver. 2.4.2 2012 - Claudio Fornaro - Corso di programmazione in C Per utilizzare le funzioni di Input/Output bisogna includere il file di intestazione
DettagliInformatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi
Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi gianluca.rossi@uniroma2.it Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)
DettagliUn esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);
Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i
DettagliFondamenti di Informatica
Strutture di dati Fondamenti di Informatica 11. Linguaggio C - Strutture / Tabelle / Puntatori Strutture /Tabelle Corso di Laurea in Ingegneria Informatica e dell Automazione A.A. 2012-2013 2 Semestre
DettagliGli 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
DettagliAritmetica dei Calcolatori 3
Laboratorio di Architettura 31 maggio 2013 1 Numeri Floating Point 2 Standard IEEE754 3 Esercitazione Numeri Floating Point (FP) Il termine Floating Point (virgola mobile) indica la codifica usata per
DettagliArray multidimensionali e stringhe
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Array uni-dimensionali (richiami) Dichiarazione: int vet[100]; float x[50]; Gli elementi
DettagliIl linguaggio C Puntatori
Il linguaggio C Puntatori Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C - puntatori 2 Ringraziamenti Questi
DettagliArray. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliElementi 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
DettagliEsercizi C su array e matrici
Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza,, ordinamento, ricerca e merge, matrice simmetrica, puntatori Array Array o vettore Composto da una serie di celle int vett[4]
DettagliStruttura 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
DettagliTipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.
Tipi di dato Le variabili in C KP Cap.3 pp.95-129 Cap.5 pp.190-193 DD Cap. 9 pp.352-355 Abbiamo già parlato delle variabili, ed abbiamo fin ora usato il tipo int, ma abbiamo molte altre possibiltà I tipi
DettagliTipi 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
DettagliI 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
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliLab 02 Tipi semplici in C
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2009/2010 Lab 02 Tipi semplici in C Lab02 1 Obiettivo dell esercitazione Acquistare
DettagliEsercitazione 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
DettagliTipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.
Tipi di dati fondamentali Tipi di dati fondamentali Linguaggi di Programmazione I Ferdinando Cicalese caratteri: char signed char unsigned char interi short int long interi unsigned short unsigned unsigned
DettagliDati aggregati. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture
DettagliProf.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
DettagliOttenere 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)
DettagliUn esempio di calcolo di complessità: insertion sort
Un esempio di calcolo di complessità: insertion sort Vediamo su un esempio come si può calcolare la complessità di un algoritmo... L esempio è un metodo semplice per ordinare arrays: insertion sort, o
DettagliCompendio 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
DettagliFondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa lezione 1. Alcune considerazioni sulla differenza tra warnings ed errors 2. Tipi i semplici i 3. Input e output in linguaggio C 4. Espressioni
DettagliLe Funzioni e la Ricorsione
Aula V Dip. di Matematica G. Castelnuovo Univ. di Roma La Sapienza Le Funzioni e la Ricorsione Igor Melatti Slides disponibili (assieme ad altro materiale) in: http://www.dsi.uniroma1.it/ melatti/programmazione1.2007.2008.html
DettagliPassare argomenti al programma
Passare argomenti al programma Quando si invoca un programma è possibile passare degli argomenti ad esso durante la chiamata. Gli argomenti ricevuti saranno stringhe (array di char) quindi l insieme di
Dettagli1 Combinazioni lineari.
Geometria Lingotto LeLing5: Spazi Vettoriali Ārgomenti svolti: Combinazioni lineari Sistemi lineari e combinazioni lineari Definizione di spazio vettoriale Ēsercizi consigliati: Geoling 6, Geoling 7 Combinazioni
DettagliIl sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.
Sistema C e organizzazione del codice Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto. Un programma C è costituito da un insieme
DettagliLinguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
DettagliLinguaggio 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
DettagliProgrammazione 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
DettagliRappresentazione binaria delle variabili (int e char)
Rappresentazione binaria delle variabili (int e char) int e char son i due tipi utilizzati dal linguaggio C per la rappresentazione di valori interi; ai valori delle variabili del primo tipo sono assegnati
DettagliL 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
DettagliAnche se due variabili vettore sono dello stesso tipo, NON è possibile l assegnamento diretto:
ESERCIZIO: Lettura/Scrittura Array Non è possibile leggere/scrivere un intero vettore con un unica operazione (a parte il caso particolare delle stringhe); occorre leggere/scrivere ognuno dei suoi componenti
DettagliEspressione di chiamata di funzione
Avvertenza Quanto segue NON è un libro, ma è una copia dei lucidi usati a lezione che NON sostituisce i libri di testo adottati e consigliati per l insegnamento di Informatica Generale. Questa copia è
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliI puntatori (richiamo)
I puntatori (richiamo) Puntatori Un puntatore è una variabile che assume come valore un indirizzo in memoria L uso dei puntatori permette di: mantenere riferimenti ad altre variabili (è un punto di accesso
DettagliFoglio Elettronico Lezione 1
- Introduzione - Celle e riferimenti - Formule - Approfondimenti - Funzioni logiche Sommario Introduzione - Foglio elettronico o foglio di calcolo - Cos'è? Strumento per raccogliere dati organizzati in
DettagliPuntatori. 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
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliCorso di Fondamenti di Programmazione canale E-O. Tipi di dato. Un esempio
Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Le variabili in C KP Cap. 3, pp. 95-129 Cap. 5, pp. 190-193 DD Cap. 9, pp.352-355 Tipi di dato Abbiamo già parlato delle variabili, ed
DettagliCorso sul linguaggio C Modulo Tipi di dato
Corso sul linguaggio C Modulo 1 1.3 - Tipi di dato 1 Prerequisiti Concetto di espressione Cenni sulla struttura del calcolatore 2 1 Introduzione In questa lezione si esaminano i tipi di dato. I tipi di
DettagliGESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
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
DettagliLezione 8. Sottoprogrammi
Lezione 8 Il linguaggio C: Sottoprogrammi e Funzioni I puntatori Input/Output su file Sottoprogrammi Per risolvere un problema si può scomporlo in problemi più semplici e comporre le loro soluzioni in
DettagliL accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.
I file L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione. I canali, sono delle strutture dati che contengono informazioni sul dispositivo fisico,
DettagliESERCIZIO: Lettura/Scrittura Array
ESERCIZIO: Lettura/Scrittura Array Non è possibile leggere/scrivere un intero vettore con un unica operazione (a parte il caso particolare delle stringhe); occorre leggere/scrivere ognuno dei suoi componenti
DettagliPuntatori Passaggio di parametri per indirizzo
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Puntatori Passaggio di parametri per indirizzo Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica
DettagliIl 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
DettagliPROVA SCRITTA 23 MARZO 2010
PROVA SCRITTA 23 MARZO 2010 In un file binario, MY_FILE.DAT, si memorizzano per ciascuno studente universitario: nome e cognome (stringhe, 20 char), matricola (intero), codice del corso di laurea (stringa
DettagliArray 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
DettagliScrittura formattata - printf
Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri
DettagliEsercizio 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
DettagliLe 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
DettagliDefinizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
DettagliSULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI
SULL USO DEI CARATTERI Ricordiamo che: int x; si legge con ( %d,&x) e si stampa con ( %d,x) float x; si legge con ( %f,&x) e si stampa con ( %f,x) double x;si legge con ( %lf,&x) e si stampa con ( %f,x)
DettagliCodice Gray. (versione Marzo 2007)
Codice Gray (versione Marzo 27) Data una formula booleana con n variabili, per costruire una tavola di verità per questa formula è necessario generare tutte le combinazioni di valori per le n variabili.
DettagliInformatica 1. Prova di recupero 21 Settembre 2001
Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo
DettagliTipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna
Tipi e Valori Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C - Tipi e Valori 2 Ringraziamenti prof. Mirko Viroli,
DettagliParametri 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
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 27 novembre 2007 In C una stringa è rappresentata da una sequenza di caratteri terminante con il carattere nullo \0 il cui valore è
DettagliLaboratorio di informatica Ingegneria meccanica
Interi in complemento a 2 () Laboratorio di informatica Ingegneria meccanica Lezione 5 29 ottobre 2007 Con N bit sono rappresentabili tutti gli interi nell'intervallo [-2^(N-), 2^(N-)-] Esempio: 6 bit,
DettagliInput/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari
Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Linguaggio ANSI C Input/Output - 1 La libreria standard del
DettagliLinguaggio 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
DettagliBreve 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
DettagliArgomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
DettagliAllocazione 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
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliUso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
Dettagli