Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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