Sei sulla pagina 1di 22

Lezione8

Puntatorieriferimentiestrutture

MauroPiccolo
piccolo@di.unito.it

Variabili

Ognivariabilehaunrvaloreedunlvalore

Rvalore=10

Lvalore:indirizzodimemoria

Puntatori

int*e'untipopuntatoreadintero

int*p
dichiarachelavariabilepe'destinataapuntare
adunqualcheidentificatoreintero
Perilmomentope'indefinito(cosi'comedopo
ladichiarazioneintx;abbiamoxindefinito)

Lvaloredix=2342

RAM

10

2342

10

Dichiarazionedipuntatori
c

p
Dichiariamopditipo
char*

E'comescrivere
charw='h'

wvieneinizializzataconilvalore'h'

Cosastampa?
Indirizzodixinesadecimale

Dereferenziarep:e'comeaverex

Dereferenziareunpuntatore
=
Ottenerel'oggettopuntato
ATTENZIONE

STAMPA9.28

Erroricomuni

Erroreincompilazione

Errorelogico

Dichiarazionedipuntatori

L'istruzioneint*p;inizializzaunpuntatorediR
valoreindefinito.Comedistinguerlodaun
indirizzobuono?

BUONAPRATICA:int*p=0;
if(p){
//faiqualcosaconp
}else{
//inizializzap
}

Errorifrequenti

intx,*p=x//xe'intenonint*
intx,*p=&x;
float*f=p;//ERROREDITIPO
//int*assegnatoafloat*
int*p,*p=6//pe'indefinito
//nonpuntaaniente

Puntatoriapuntatori

RAM

10

pp

Seorafacciamo*pp=&q

RAM

10

cout<<*p<<<<**pp<<endl//stampa1010

Eseavessimofattop=&q??

pp

Conlunghecatenedipuntatorie'facile
dimenticarediinizializzarequalchelivello

Dereferenziareunpuntatoreindefinitoe'errore
grave
Chediredi
???

Osservazioni

Ilsimbolo*haduesignificatidiversi
Ilcontestoincuiappare*indicadichecosasi
tratta

char*p;//dichiarazionedipuntatoreachar

*x=.;
.=.*x..;//dereferenziazione

Riferimenti

Iriferimenticipermettonodicrearealiasdi
variabili

ye'unaliasdix
cioe'halostessoLvaloreedRvaloredix
IriferimentinonesistonoinC
sonostatiintrodottiperfacilitareilpassaggiodi
parametriallefunzioni(vedremopiu'avanti)

Comevienerealizzatounalias?

Conunpuntatore

Inrealta&y=x;definisceunpuntatore
int*z=&x;eognivoltachescriviamoynel
programma,ilcompilatorelotraducein*z.
TecnicausatainJavadovetuttiipuntatorisono
nascostidariferimenti

Regoledeiriferimenti

Vannoinizializzatisubitoall'attodella
dichiarazione

intx;
..
int&y=x;//OK

Nonsipossonodefinirepuntatoriariferimenti

intx,&y;//NONVA
y=x;

Cosastampa???

Lestrutture

UnastrutturaCe'unacollezionedivariabilidi
unoopiu'tipiraggruppatesottounnome
comune
Dichiarazionediunastruttura

Ladichiarazionediunastrutturadefinisceun
tipo

Lestrutture

Dichiarazionediunavariabileditipostructpoint

Dichiarazioneedinizializzazionediuna
variabileditipostructpoint

Accessoallecomponentiepuntatori
astrutture

Allecomponentiomembridellastrutturasi
accedeattraversol'operatore.

Dichiarazionediunpuntatoreastruttura
L'accessoallecomponentidellastruttura
puntatadappavvienemediantel'operatore>

Arraydistrutture

Ladichiarazione

dichiarauntipostrutturakey,definisceunvettorekeytabdi
strutturediquestotipoeriservamemoriapertalistrutture

Avremmopotutoscrivere

Ognielementodikeytabe'unastrutturastructkey:quindi
possiamoaccedereallecomponentidiquest'ultimacon

keytab[i].wordekeytab[i].count