variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca...

22
Lezione 2 Variabili e Costanti Laboratorio di algoritmi e Strutture Dati 2001/02 1 Lezione 2 Variabili e Costanti Laboratorio di Algoritmi e Strutture Dati 2001 -02 1 Struttura di un Programma C++ üUn programma descrive una sequenza di azioni üogni azione è descritta da una espressione üun insieme di espressioni seguite da ; è un istruzione espressione = più piccola unità di programma di significato autonomo üEsempi di espressioni dichiarazioni (int i;) assegnamento (i = 7+1;) input/output (cout << i;) controllo di flusso (for, while, if, etc.)

Transcript of variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca...

Page 1: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 1

Lezione 2

Variabili e Costanti

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

1

Struttura di un Programma C++

üUn programma descrive una sequenza di azioni

üogni azione è descritta da una espressione

üun insieme di espressioni seguite da ; è un istruzione®espressione = più piccola unità di programma di significato autonomo

üEsempi di espressioni®dichiarazioni (int i;)®assegnamento (i = 7+1;)®input/output (cout << i;)®controllo di flusso (for, while, if, etc.)

Page 2: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 2

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

2

Struttura di un Programma C++

ü Istruzioni raggruppate in unità logiche dette funzioni

ü Una funzione consiste di quattro parti® tipo di dati da restituire® nome della funzione® lista degli argomenti® corpo della funzione

ü Ogni programma deve contenere una funzione main

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

3

Esempio Programma C++

Gestione archivio di una libreria. Il programma deve periodicamente aggiornare il file di magazzino e fornire dati sulle vendite.

® legge la lista dei volumi venduti® ordina la lista per autore e titolo® conta il numero di copie vendute di ciascun volume

e cancella duplicati® aggiorna il file di magazzino® stampa i risultati

Page 3: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 3

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

4

Esempio Programma C++#include <iostream>using namespace std;void leggi() { cout << “sto leggendo”; }void ordina() { cout << “sto ordinando”; }void conteggia() { cout << “sto contando”; }void stampa() { cout << “sto stampando”; }

int main() {leggi();ordina();conteggia();stampa();return 0;

}

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

5

Direttive al Preprocessore

ü #include <iostream> è una direttiva al preprocessore ® include il contenuto del file iostream.h nel file del programma

prima della compilazione® Se il file da includere non ha estensione fa parte della libreria

standard

ü le direttive al preprocessore sono istruzioni eseguite prima della compilazione

ü #include, #define, #ifdef, #ifnotdef, #else, #endif, #pragma sono tutte direttive al preprocessore® # deve essere il primo carattere della linea ® non c’è ; al termine dell’istruzione

Page 4: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 4

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

6

Spazi dei nomi

ü Ogni variabile è definita all’interno di un namespace® Il nome della variabile è formato dal nome del namespace e

dall’identificatore della variabile

std::cout << “ciao”;

üL’istruzione using namespace std specifica il namespacedi default

®Se non specificato l’identificatore della variabile viene ricercato all’interno del namespace di default

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

7

Compilazione ed Esecuzione di un Programma C++

ü Per compilare® g++ (-g) (-o out) (-c) file1.C file2.c file3.cpp (-llib)w -g ---> debuggerw -o ---> eseguibile in out (per default in a.out)w -c ----> compila ma non linka i file.ow -l ----> linka libreria libw -I ----> modifica path di ricerca nel file system

ü Il compilatore opera due passi® compilazione® linkaggio

ü Il compilatore esegue controlli lessicali e sintattici sul codice del programma

Page 5: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 5

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

8

Elementi Essenziali del Linguaggio

ü Dati su cui operare

ü Operazioni per manipolare i dati

ü Istruzioni per controllare il flusso del programma

ü Librerie per implementare operazioni non predefinite

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

9

Datiü Un dato ha un tipo ed un indirizzo

® L’indirizzo specifica dove il dato risiede in memoria® Il tipo di un dato specifica come il dato è memorizzato

e quali sono le operazioni legali su di esso

indirizzo

tipo int:4 byterappresentazione in complemento a 2

Page 6: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 6

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

10

Indirizzo di un Datoü La memoria è una sequenza di celle

® un bit per cella

ü Le celle sono raggruppate in gruppi® byte (8 bit) e word (4-8 byte)

ü ad ogni byte è assegnato un numero d’ordine (indirizzo)® il byte è la minima unità di memoria indirizzabile

ü L’indirizzo di un dato è l’indirizzo del primo byte in cui è contenuta la rappresentazione del dato® Dati e istruzioni sono memorizzati nella stessa memoria

(modello di Von Neumann)

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

11

Tipo di un Dato

ü Il Tipo di un dato specifica® quanti byte sono necessari a rappresentarlo® come il dato è rappresentato® quali operazioni sono possibili su quel dato® come tali operazioni sono realizzate

Page 7: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 7

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

12

Tipi di Dati Predefiniti

Tipo

char

int

short

long

float

double

long double

Dimensione1 byte

1 worddipende dalla

macchinadipende dalla

macchina1 word

2 word

3-4 word

Utilizzocaratteri o piccoli

interiinteri

reali in singola precisione

reali in doppia precisione

reali in multipla precisione

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

13

Costanti Letterali

ü Dato memorizzato ma non indirizzabile® ha comunque un tipo

int i = 2; // 2 costante letterale

ü Costanti letterali intere sono signed int per default® possono essere rappresentate in decimale, ottale o

esadecimale® possono anche essere di altro tipo

12, 010, 0xFF, 128u, 3e1, 1024Ulü Costanti letterali in virgola mobile sono double per

default® possono anche essere di altro tipo

1.0f, 3.14l, 3e1, 1.4E-2

Page 8: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 8

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

14

Costanti Letterali

ü Costanti letterali carattere stampabile sono scritte tra apici

ü I caratteri non stampabili, gli apici ed il backslash sono rappresentate da sequenze di escape

‘A’, ‘b’, ‘.’, ‘?’, L ‘a’

ü Costanti letterali stringhe sono scritte tra doppi apici‘\n’, ‘\t’, ‘\”’, ‘\\’, ‘\0’ (null), ‘\12’ (return)

ü Una stringa è un array di caratteri seguito dal carattere ‘\0’

“ciao mondo”, L “città”

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

15

Variabili Simboliche

ü Dato memorizzato ed indirizzabile® tramite l’indirizzo si può recuperare il dato e modificarlo® Si definisce anche oggetto

ü Una variabile è identificata da un nome (identificatore) fornito dal programma

ü Ad un identificatore sono associati un indirizzo ed un tipo ® specificati al momento della definizione del dato

ü ch identifica il valore di un’area di memoria lunga 1 byte,

ü localizzata ad un certo indirizzoü memorizzata come un carattere

(codice ASCII)

char ch;

Page 9: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 9

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

16

Identificatori

ü Il nome della variabile può contenere lettere, cifre o _® Il compilatore distingue tra maiuscole e minuscole® Il primo carattere deve essere una lettera® Nessun limite di lunghezza

ü Stili più diffusi® variabili in minuscolo, tipi con iniziale maiuscola,

costanti in maiuscolo® nomi composti

voti_esamevotiEsame

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

17

ü Ad ogni variabile sono associati® R-value valore della variabile® L-value indirizzo della variabile

Variabili Simboliche

l’espressione a destra dell’operatore considera il valore della variabilel’espressione a sinistra dell’operatore considera l’indirizzo della variabile.

ch = ch + ‘0’;

ü E’ possibile specificare la stessa variabile su entrambi i lati di un assegnamento

Page 10: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 10

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

18

nome tipo indir.

Definizione di Variabili Simboliche

ü introduce il nome ed il tipo di una variabile ® il compilatore alloca memoria sufficiente a

contenere il dato ed assegna l’indirizzo di questa memoria all’identificatore della variabile

Una variabile può essere definita una sola volta in tutto il programma

char ch;charch

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

19

Dichiarazione di Variabili Simboliche

ü introduce il nome di una variabile che è stata definita da qualche altra parte nel programma

® il compilatore non alloca memoria

Una variabile può essere dichiarata più volte nello stesso programma

extern char ch;nome tipo indir.

charch ----

Page 11: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 11

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

20

Dichiarazioni e header file

ü In un progetto strutturato su più file in ogni file vengono dichiarate (o definite) tutte le variabili utilizzate® La stessa variabile è dichiarata in file diversi® Se modifichiamo il tipo della variabile dobbiamo modificare tutte

le dichiarazioni

ü Per agevolare la mantenibilità del codice conviene concentrare le dichiarazioni delle variabili in un solo file® Le variabili sono dichiarate in un header file® Tutti i file del progetto includono l’header file® Per modificare il tipo di una variabile basta modificare l’header

file

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

21

ü Il valore assegnato ad una variabile al momento della definizione è arbitrario

ü E’ possibile assegnare un valore iniziale alla variabile® risultato di una qualunque espressione

Definizioni ed Inizializzazioni

ü E’ possibile concatenare più definizioni sulla stessa linea di codice

char ch = ‘a’;int i(10);double prezzo_vendita(prezzo*sconto);char c = c; // cosa fa?

double prezzo = 100.5, sconto = 0.15;

Page 12: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 12

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

22

Inizializzazioni di Default

ü E' pericoloso definire una variabile senza inizializzarla® È vietato definire oggetti di tipo classe non inizializzati

ü Le variabili globali definite al di fuori delle funzioni sono inizializzate per default a 0

ü Le variabili locali non sono inizializzate

ü Tutti i tipi predefiniti possono essere inizializzati a 0 da un costruttore di default

int ival = int(); // inizializza ival a 0vector<int> ivec(10); /* definisce un vettore di

10 interi inizializzati a 0 */

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

23

ü Dati memorizzati ed indirizzabili che non possono essere modificati (variabili a sola lettura).

Costanti Simboliche

®L’uso delle costanti simboliche aumenta notevolmente la leggibilità del codice

const int bufferSize = 512;

Il compilatore non permette di®modificare il valore di una costante simbolica®definire una costante simbolica non inizializzata®assegnare l’indirizzo di una costante simbolica ad

un puntatore

Page 13: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 13

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

24

Puntatoriü Una variabile di tipo puntatore contiene un

indirizzo

® tramite una variabile puntatore si può referenziare indirettamente una variabile

nome tipo indir.

char*ptr

ü Un puntatore può contenere l’indirizzo di un oggetto o di una funzione

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

25

Puntatori

ü Un puntatore viene definito facendo precedere l’identificatore dall’operatore di dereferenziazione (*)

int *ip1, *ip2; // ip1 e ip2 puntano ad intunsigned char *ucp; // ucp punta ad un char senza segnofloat fp, *fp1; // fp è un float, fp1 punta ad un floatchar* cp, cp1; // cp punta a char, cp1 è un char

ü La dimensione di un puntatore ad un oggetto è sufficiente a contenere un indirizzo® 4 byte su macchine a 32 bit

ü Il tipo di un puntatore ad un oggetto è il tipo della variabile puntata® tutti i puntatori ad oggetti hanno la stessa dimensione

Page 14: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 14

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

26

Inizializzazioni di Puntatori

ü Un puntatore può essere inizializzato con l’indirizzo (L-value) di una variabile dello stesso tipo

ü Per ottenere l’L-value di una variabile si applica l’operatore di indirizzo (&)

int i = 1024;int *p = &i;int *ip = p;char *cp = 0; // inizializza a NIL

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

27

Inizializzazioni Illegali

ü Il C++ è un linguaggio strongly typed® Il compilatore controlla che in ogni assegnazione o

inizializzazione l’R-value del lato destro sia dello stesso tipo dell’L-value del lato sinistro

ü Sono errate tutte le istruzioni che assegnano ad un puntatore l’R-value di una variabile o l’indirizzo di una variabile di tipo diverso

int i = 24;

int *ip = &i;

int *ip1 = &ip; /* ERRORE */

char *cp = ip; // ERRORE

int *ip2 = i; // Errato ma consentito da molti compilatori

Page 15: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 15

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

28

Indirizzamento Indiretto (Lettura)

üAccede al valore di un oggetto tramite un puntatore che indirizza l’oggetto. Si usa l’operatore (*)

int i = 1024;int *ip = &i; // ip contiene l’indirizzo di i

int k = *ip; // k = 1024k = ip; // ERROREip = i; // ERRORE

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

29

Indirizzamento Indiretto (Scrittura)

ü Tramite l’operatore di indirizzamento indiretto è possibile assegnare un valore ad un oggetto indirettamente

int i = 1024;int *ip = &i; // ip punta ad i

*ip = k; // i = k*ip = abs(*ip); // i = abs(i)*ip = *ip + 1; // i = i + 1

Page 16: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 16

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

30

Puntatori a Puntatori

üUn puntatore può contenere l’indirizzo di un puntatore® Se dereferenziato restituisce un puntatore

int i = 1024;int *ip = &i; // ip punta ad i

int **ipp = &ip;**ipp = 100; // i = 100ip = ipp; // ERRORE

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

31

Puntatori Generici

ü Un puntatore generico è di tipo void*® ad un puntatore generico possono essere assegnati indirizzi

di oggetti di qualsiasi tipo

ü Un puntatore generico non può essere utilizzato per accessi alla memoria® non ha le informazioni sul tipo di oggetto indirizzato

int *pi; double *pd; void *pv = pi;pv = pd;*pv = 3.14; // ERRORE

ü I puntatori generici sono usati per passare ad una funzione puntatori di tipi differenti o confrontare indirizzi di memoria

Page 17: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 17

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

32

Aritmetica dei Puntatori

ü E’ possibile effettuare delle manipolazioni sui valori dei puntatori® L’unità di misura nelle manipolazioni dei puntatori è

la dimensione del tipo del puntatoreint i = 100;int *ip = &i; // ip punta ad i

*ip = *ip + 2; // i = i + 2ip = ip + 2; // ip punta 8 byte più avanti di iint *ip2 = ip - 4; // ip2 punta 16 byte dietro ad ipint k = ip - ip2; // k = 4

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

33

Cast

ü Il cast cambia il tipo di una variabile® il contenuto della memoria resta inalterato® cambia la quantità di memoria letta e il modo in

cui viene interpretata

ü Il cast è un operazione pericolosa ed il compilatore non la esegue mai automaticamenteint i = 1000;int *ip = &i;char c = *(char *)ip; // legge solo primo byte di idouble d = *(double *)ip; // legge 4 byte oltre i

Page 18: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 18

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

34

Puntatori a Costanteü Un puntatore a costante può essere utilizzato solo per

accedere indirettamente ad un oggetto in lettura® non in scrittura

ü L’indirizzo di una costante simbolica può essere assegnato solo ad un puntatore a costante

const double *pc;

const double d = 3.14;pc = &d; // pc punta alla costante d*pc = *pc + 1; // ERRORE, cerca di modificare d

double d1 = 1.2;pc = &d1; // pc punta alla variabile d1*pc = d1*2; /* ERRORE, cerca di modificare d1

tramite pc */

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

35

Puntatori Costantiü Un puntatore costante non può essere

modificato ma può essere utilizzato per modificare l’oggetto puntato® Un puntatore a costante può essere modificato ma

non può essere usato per modificare il contenuto dell’oggetto puntato

*err = *err + 1; // incrementa il valore di errNum

err = err + 1; // ERRORE, modifica err

int errNum;

int *const err = &errNum;

Page 19: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 19

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

36

Puntatori Costanti a Costante

üUn puntatore costante a costante non può essere modificato e non può essere utilizzato per modificare l’oggetto puntato

const int passo = 1;const int *const ptr = &passo;

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

37

Utilizzo dei Puntatori Costanti

ü I puntatori a costante vengono usati per indirizzare delle variabili che non devono essere modificate® passaggio per riferimento ad una funzione senza side

effect

ü I puntatori costanti sono utilizzati per legare un puntatore ad un oggetto ed impedire che possa essere spostato® indirizzamento di informazioni relative alla gestione

degli errori

Page 20: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 20

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

38

Variabili Riferimento (Indirizzo)

ü Una variabile di tipo riferimento fornisce un alias per il nome della variabile con cui è stata inizializzata

Una variabile riferimento deve essere inizializzata

nome tipo indir.

inti

int&rif

int i = 1;int &ref = i

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

39

Operazioni su Variabili Riferimento

üOgni operazione sulla variabile riferimento equivale ad una operazione sull’oggetto associato® Equivale a definire un puntatore costante

senza usare la sintassi dei puntatori

ref = ref + 1; // incrementa i di 1

ü Non è possibile modificare la variabile a cui il riferimento è associato

Page 21: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 21

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

40

Utilizzo Variabili Riferimento

ü Sono usate per passare argomenti ad una funzione per riferimento® la funzione può operare sugli argomenti passati per

riferimento senza usare la sintassi dei puntatori® il codice è più chiaro e leggibile

void scambia(int& x, int& y) {int tmp = x;x = y;y = tmp;

}

void scambia(int* x, int* y) {int tmp = *x;*x = *y;*y = tmp;

}

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

41

Costanti Riferimento

üE’ possibile definire variabili riferimento costanti® non consentono di modificare il valore

dell’oggetto associato

const int& cri = i;cri = cri + 1; // ERRORE

Page 22: variabili e costanti - UNISAüintroduce il nome ed il tipo di una variabile fiil compilatore alloca memoria sufficiente a contenere il dato ed assegna l’indirizzo di questa memoria

Lezione 2Variabili e Costanti

Laboratorio di algoritmi e Strutture Dati 2001/02 22

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

42

Definizioni di Variabili Riferimento

ü In una lista di definizioni ogni riferimento deve essere preceduto da (&)

ü Un riferimento ad una variabile è inizializzato con l’L-value di una variabile dello stesso tipo

int i;int &ip1 = i, &ip2 = i;int &ip3 = i, ip4 = i; // ip4 non è un riferimento

int& ri = i;char c = ‘a’;int& ri2 = c; // ERRORE

Labo

rato

rio d

i Alg

oritm

i e S

trut

ture

Dat

i 200

1-02

43

Inizializzazione di Riferimenti con Variabili Temporanee

ü Un riferimento costante può essere inizializzato con costanti letterali e variabili di tipo diverso ma compatibile® Gli oggetti non indirizzabili vengono memorizzati in variabili

temporanee prima di essere utilizzati per l’inizializzazione® La variabile temporanea può essere convertita ® Le operazioni hanno effetto solo sulla variabile temporanea

const int &ir = 1024; // int temp = 1024; const int &ir = temp;

double d1, d2;

const double &d = d1 + d2; // double t = d1+d2; const int &ir = t;

const int &ci = d1; // int temp = d1; const int &ci = temp;