Laboratorio di Linguaggi lezione II Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Introduzione al linguaggio C++
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
LINGUAGGIO DI PROGRAMMAZIONE C
Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica.
Selezione - approfondimento
I DATI I PRINCIPALI TIPI DI DATO UTILIZZATI IN PROGRAMMAZIONE
Fondamenti di Informatica CDL in Ingegneria Meccanica - A.A CDL in Ingegneria Meccanica - A.A Tipi di dati Ing. Simona Colucci.
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Tipi di dati Ing. Simona Colucci.
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Programmazione Procedurale in Linguaggio C++
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Laboratorio di Linguaggi lezione IV: tipi definiti dallutente Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VI Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione II Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII B: Puntatori e Pasticci Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione III: tipi base, espressioni, type-cast Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e.
Laboratorio di Linguaggi lezione V: puntatori (1/3) Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione IX: tipi ricorsivi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08.
Laboratorio di Linguaggi lezione II Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Variabili e tipi primitivi Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
Corso di Informatica Applicata Lezione 6
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
Struct, enum, Puntatori e Array dinamici
Dichiarazioni e tipi predefiniti nel linguaggio C
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
Java base I: Sintassi e tipi di dati
Programmazione in Java
JAVA Franco Bombi 8 ottobre FB Introduzione Java è un linguaggio di impiego generale, basato su classi e orientato agli oggetti Java.
CODIFICA Da flow-chart a C++.
Tipi di dati elementari
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Programmazione in Java
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
STRUTTURA DI UN PROGRAMMA C In prima battuta, la struttura di un programma C è definita dalla seguente produzione: ::= { }
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 9 e 10 - Segmenti.
Lezione 9 e 10 - Segmenti di memoria e puntatori - Aritmetica dei puntatori - Formattazione dei dati - Significato ed impiego del cast - Tipi di dato strutturato.
Lezione 2 : Basi del linguaggio Variabili. Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili  int cadenza = 0;  int velocita.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Appunti su formati numerici. Tipi numerici Il C dispone di due tipi numerici: tipi interi e tipi reali; I tipi reali sono anche detti floating, ovvero.
Transcript della presentazione:

Laboratorio di Linguaggi lezione II Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2004/05

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Laboratorio di Linguaggi docente: Marco Tarini ricevimento: Martedì 14: :30 o anche su appuntamento libro di testo consigliato: Kelley Al, Pohl Ira: "C Didattica e Programmazione" ("A Book on C") quarta edizione - anche la terza va bene

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Laboratorio di Linguaggi link utile: –guida essensiale di alcuni emementi di C v = argomanto già trattato

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Prima di andare avanti in questi lucidi (e nell'ambiente DevC++) le reserved words sono in blu! –non si possono usare per gli identificatori –ma, ricordiamoci, il C è case sensitive " " non si è un nome lecito per una nuova var, ma " " si. int potenza (int b, int e) { int res=1, i; for (i=1; i<=e; i++) { res = res * b; } return res; } int Int

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi Base tipi base: –intero –floating point –booleano tipi derivati: –enumerazione –strutture –arrays int x;... if (x) a(); else b(); esegue b se e solo se x è zero. esegue a in tutti gli altri casi (anche se x è negativo) vale anche per i tipi non interi...

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi Base : interi int long short char dimensione (in bytes) 1 2* 4* tipo minino valore assumibile massimo valore assumibile K +32K (-1) - 2*K*K 2*K*K (-1) (idem) * Di solito. Dipende dalla macchina. (remember: niente macchine astratte!)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi Base : interi int long short char dimensione (in bytes) 1 2* 4* tipo minino valore assumibile massimo valore assumibile K (-1) +4*K*K (-1) (idem) * Di solito. Dipende dalla macchina. (remember: niente macchine astratte!) unsigned Variante unsigned int pippo; Esempio: con questa variante, si risparmia il bit del segno.

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Facciamo un nuovo tipo Byte a,b,c; int main(){ Byte pippo=21, panco;... } typedef unsigned char Byte; (ricordiamoci la filosofia del C: linguaggio scarno, ma estendibile!) typedef unsigned char Byte; typedef ;

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Costanti (literals) intere Molti modi per scriverle… int a,c = 16, b; int main(){ char pippo= 67; if (pippo + a > 21) {... } else { b = 4;... }

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Costanti (literals) intere Molti modi per scriverle… int a,c = 0x10, b; int main(){ char pippo= 'C'; if (pippo + a > 025) {... } else { b = 4;... } codifica base 16: ABCDEF 0xFFFF 0xFFFFFFFFFF 0xA000 codifica base 8: codifica ASCII (per caratteri). 'A' 'a' 'B' =97 =65=66 'b' =98 '+' =43 '?' =67 etc. (256 "caratteri" in tutto)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Piccoli trucchi con i chars Caratteri ASCII e numeri di un byte sono proprio lo stesso tipo! char c0, c1;... if (c0<c1) { /* c0 viene prima di c1 in ordine alfabetico */... } else { /* c0 viene dopo di c1 in ordine alfabetico, o c0==c1 */... } (ricordiamoci la filosofia del C: linguaggio che permette di dire tutto in poche righe di codice.) (poche e quindi talvolta criptiche. Usare commenti!)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Piccoli trucchi con i chars Caratteri ASCII e numeri di un byte sono proprio lo stesso tipo! /* restituisce 1 se il carattere e' una lettera maiuscola, o 0 altrimenti */ int is_minuscolo(char c){ if (c>='A') && (c<='Z') return 1; return 0; } /* restituisce la versione minuscola di un carattere dato*/ char minuscolo(char c){ if (c>='A') && (c<='Z') return c - 'A' + 'a'; return c; } (ricordiamoci la filosofia del C: linguaggio che permette di dire tutto in poche righe di codice.) (poche e quindi talvolta criptiche. Usare commenti!)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi Base : virgola mobile long double double float dimensione (in bytes) 4* 8* tipo minino/massimo valore assumibile cifre decimali esprimibili (circa) * Di solito. Dipende dalla macchina. (remember: niente macchine astratte!) 10 ∓38 10 ∓308 (idem) 6 15 (idem) * float è più efficiente in spazio, ma sorprendentemente può essere persino meno efficiente in tempo (es. su molti processori INTEL).

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Literals in virgola mobile 5.32f 5.32 un float che vale 5,32 un double (un float a precisione doppia) che vale 5, e-12 un double che vale 5,32 x e12 un double che vale 5,32 x e-12f un float che vale 5,32 x double epsilon = ; che è meglio (più chiaro, meno orrendo) di: double avogadro = 6.022e23; /* N molecole x mole */ esempi: double epsilon = 1e-18;

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipo delle espressioni viene indovinato dal compilatore… int x = 10, y; x = x / 3; double x = 10, y; y = x / 3; equivalente a: double x = 10.0, y; y = x / 3.0; float x = 10.0f, y; y = x / 3; equivalente a: double x = 10.0, y; y = x / 3.0; in sostanza, nelle operazioni miste viene convertito tutto al tipo più preciso. (double più preciso di float, float di int).

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipo delle espressioni si può anche cambiare esplicitamente: si tratta di un type-cast –sintassi: –altri esempio: double x = 10.0; y = (int)(x) / 3; /* y = 3.0 */ ( ) int numerone1, numerone2, media;... media= (numerone1 + numerone2) /2; media= (unsigned int) (numerone1 + numerone2) /2;

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a La dimensione dei vari tipi Si può chiedere al compilatore. Costrutto "sizeof" –sintassi: ad esempio, è una espressione (costante) che vale 4. –nota: non è una funzione (che restituisce 4): non c'è nessuna invocazione di funzione, il valore di "sizeof" è risolto staticamente sizeof( ) sizeof( int )

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi costruiti: il tipo enum. ("giorno" è una var che vale uno dei valori listati) enum { LUN, MAR, MERC, GIOV, VEN, SAB, DOM } giorno; esempio: meglio definire un tipo: typedef enum { LUN, MAR, MERC, GIOV, VEN, SAB, DOM } GiornoSettimana; GiornoSettimana ieri, oggi; ("GiornoSettimana" è il tipo delle variabili che possono assumere i valori listati, e "ieri" e "oggi" sono due variabili di tale tipo)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi costruiti: il tipo enum. typedef enum { LUN, MAR, MERC, GIOV, VEN, SAB, DOM } GiornoSettimana; GiornoSettimana ieri, oggi; semplicemente delle nuove costanti, che valgono 0, 1, 2, 3, 4, 5, 6 if ( (oggi > MERC) && (oggi <= VEN ) )... if ( oggi == DOM ) oggi = LUN; else oggi++; oggi = ( oggi + 5 ) % 7; come si fanno passare 5 giorni? sono implementati come interi, a tutti gli effetti.

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi composti: il tipo struct typedef struct { char giorno; Mese mese; short anno; } Data; Data oggi, mio_compleanno; Data data_esame = { 28, OTTOBRE, 2004 }; int main(){ data_esame.mese = DICEMBRE;... }; definizione del tipo. MA NON E' UNA CLASSE: tutto "public" niente metodi niente costruttore… dichiarazione di alcune variabili con inizializzatore (nota la sintassi del literal, a dx del '=') accesso ai campi (come per le classi)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi composti: il tipo struct typedef struct { char giorno; Mese mese; short anno; } Data; sizeof(Data) si può chiedere la dimensione del nuovo tipo "Data": sizeof(char)+sizeof(Mese)+sizeof(short) che sarà uguale a: codifica di giornocodifica di mesecodifica di anno in fatti, in memoria, una struct e' codificata come la semplice concatenzaione delle codifiche dei suoi campi :

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Tipi composti: il tipo struct typedef struct { char giorno; Mese mese; short anno; } Data; typedef struct { Data partenza; Data arrivo; int numero_stanza; } Prenotazione; Prenotazione p = { { 28, OTTOBRE, 2004 }, { 2, NOVEMBRE, 2004 }, 23 };

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Gli array simile a java… come prima, si può definire il tipo senza dichiarare nessuna variabile in ogni caso… /* cartella della tombola, contiene 15 numeri*/ int cartella[15]; typedef int Cartella[15]; int main(){ Cartella mia, sua; mia[2]=31; } si usano solo tipi interi per indicizzare. (qui: da 0 a 14) NB: no range checking ! Segmentation faults sempre in agguato. deve essere una costante! (il comp. deve sapere quanti elementi allocare)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Gli array: inizializzazione Inizializzazione di array (opzionale, come sempre) int cartella[15]={ 10,21,33,13,4, 12,4, 53, 1,78, 2,54,31,86,78, }; l'ultima virgola è tollerata int cartella[]={ 10,21,33,13,4, 12,4, 53, 1,78, 2,54,31,86,78, }; se si inizializza un array, allora non è necessario specificare il numero di elementi (li conta il compilatore per noi)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Gli array: inizializzazione Inizializzazione di array: –gli array di caratteri godono di un inizializzatore speciale: –questa inizializzazione: –si può scrivere equivalentemente così: char nome[]={'m','a','r','c','o',' ','t','a','r','i','n','i',0}; char nome[]= "marco tarini"; nome[ 5] nome[ 6] nome[12] ' 't' '\0' vale la costante char 0. Si può scrivere anche così: Per convenzione, è usato come terminatore delle stringhe: '\0'

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Gli array: storaggio Importante: –in memoria, gli elementi di un array sono memorizzati in una serie di celle contigue –ogni cella ha la stessa grandezza –per questo gli array sono random access! int cartella[5]={ 10,21,33,13,4, }; 10 indirizzo base di "cartella" indirizzo di cartella[3] = (indirizzo base) + 3 x (dimensione cella) cartella[3] dimensione cella (=4)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Problema Cosa succede, se non si sa a priori quanti elementi dovremo allocare? –(a tempo di esecuzione) Necessità allocazione dinamica di array. Per la soluzione di questo problema, useremo i puntatori

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Puntatori: intro Una tipo variabile che contiene un indirizzo di una locazione di memoria: –l'indirizzo di un'altra variabile!

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Puntatori: sintassi della dichiarazione int* pippo; " pippo " è una var di tipo int *, cioè puntatore ad intero int *pippo; " * pippo " (cioè il valore puntato da pippo) è una var di tipo intero o se preferite:

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Puntatori: sintassi dell'uso pippo; il valore del puntatore. *pippo; il valore dell'oggetto puntato. entrambi possono essere sia letti che assegnati (possono comparire da entrambi i lati di un assegnamento)

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Puntatori: preambolo Cosa succede normalmente… int pippo = 0xA0; R A M 0x xFFFFFFFF il compilatore assegna alla variabile pippo una locazione di memoria. Ad esempio, la locazione 0x612A22C Inoltre, riserva quei quattro byte per la variabile pippo. spazio degli indirizzi logici 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A4 21 2A 02 2C A A3 D0

M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Puntatori: preambolo Cosa succede normalmente… int pippo = 0xA0; pippo = 0x00AABB00; R A M 0x xFFFFFFFF il compilatore assegna alla variabile pippo una locazione di memoria. Ad esempio, la locazione 0x612A22C Inoltre, riserva quei quattro byte per la variabile pippo. spazio degli indirizzi logici 0x612A0230 0x612A022C 0x612A0228 0x612A0224 0x612A0220 0x612A021C 0x612A0218 0x612A FF AB D2 FF FF A4 21 2A 02 2C A A3 D0 Inoltre variabiletipolocazione pippoint 0x612A22C dopo la complazione STORE 0x0612A22C 0x00AABB00 00 AA BB 00