Upload
dejan-marinkovic
View
17
Download
1
Embed Size (px)
DESCRIPTION
Pokazivačka promenljiva je promenljiva koja “pokazuje “ na drugu promenljivu, odnosno sadrži adresu memorijske lokacije u kojoj se čuva ta promenljiva Deklariše se tako što se u specifikaciji zada tip promenljive na koju ukazuje pokazivačka promenljiva. Ispred imena promenljive piše se * int *pi /*pokazivač na celobrojnu promenljivu */ char *pc /*pokazivač na znakovnu promenljivu */ float *pf1, *pf2 /*pokazivač na float promenljive */ j = *pi dodeljuje promenljivoj j celobrojnu vrednost koja se nalazi na adresi sadržanoj u promenljivoj pi.
Citation preview
3/28/2011 1
Pokazivačke promenljive,
• Pokazivačka promenljiva je promenljiva koja “pokazuje “ na drugu promenljivu, odnosno sadrži adresu memorijske lokacije u kojoj se čuva ta promenljiva
• Deklariše se tako što se u specifikaciji zada tip promenljive na koju ukazuje pokazivačka promenljiva. Ispred imena promenljive piše se *
• int *pi /*pokazivač na celobrojnu promenljivu */• char *pc /*pokazivač na znakovnu promenljivu */• float *pf1, *pf2 /*pokazivač na float promenljive */• j = *pi dodeljuje promenljivoj j celobrojnu vrednost koja
se nalazi na adresi sadržanoj u promenljivoj pi.
3/28/2011 2
Pretpostavimo da postoji sledeća deklaracija i inicijalizacija promenljive prom:
int prom= 0 ;
Deklaracija int * ukaz_prom; nam omogućava da indirektno pristupimo vrednosti promenljive prom.
Za promenljive prom i ukaz_prom možemo pisati iskaz:
ukaz_prom = &prom; koji promenljivoj ukaz_prom dodeljujeadresu promenljive prom.
Ako je promenljiva x deklarisana kao int, tada se iskazom
x = *ukaz_prom; dodeljuje vrednost promenljive na koju pointer ukaz_prom ukazuje. Pošto je promenljiva ukaz_prom
u ranijem iskazu postavljena na vrednost &prom efekat prethodnog iskaza dodeljivanje promenljivoj x vrednost promenljive prom.
Operatori & i * su unarni istog prioriteta i inverzni su međusobno.
3/28/2011 3
Pretpostavimo da imamo deklaraciju
Int x,y,*uTada su iskazi
u = &xY= *u;Ekvivalentni iskazu
Y = *&xKoji je opet ekvivalentan iskazu
Y = x
Operatori dodeljivanjapi = &ij = *piImaju isti efekat kao j = i
3/28/2011 4
Pokazivaci
• Int x=1, y=2;
• Int *ip
• ip=&x x y ip» 100 200 1000
»
• y= *ip x y ip» 100 200 1000
• x=ip x x y ip» 100 200 1000
• *ip=3 x y ip» 100 200 1000
1 2 100
3 2 100
100 2 100
1 1 100
3/28/2011 5
Pointeri opet ali, malo drugačije
• Pokazivač se definiše kao i ostale promenljive. Razlika je što se nazivu promenljive dodaje unarni operator simbol (*) ispred identifikatora određene promenljive. Zvezdica (*) je simbol za indirektno adresiranje pa se zato i sam operator (*) naziva i operatorom indirektnog adresiranja.
• Kada se operator indirekcije (*) primeni na neki pokazivač, njime se pristupa objektu na koji pokazivač pokazuje.
• int *p1; /* pokazivač na integer promenljivu
• char *p2; /* pokazivač na char promenljivu
• long double *p4; /* pokazivač na long double promenljivu
3/28/2011 6
• Pokazivač je dakle promenljiva koja sadrži adresu objekta tj. neke promenljive na koji pokazuje. Kada je sadržaj pokazivača adresa nekog objekta tada je pokazivačinicijalizovan.
• Adresa nekog objekta u memoriji koji je predstavljen svojim identifikatorom, može da se dobije pomođu prefiksnog unarnog operator (&), odnosno adresa neke promenljive dobija se korišćenjem ovog adresnog operatora.
• .
3/28/2011 7
Jedan poučan primer
• int broj; /* promenljiva tipa int
• int *pok; /* pokazivač na int tip
• broj = 10; /* inicijalizacija promenljive broj na 10
• pok = &broj; /* inicijalizacija pokazivač tako da pokazuje na promenljivu broj
• *pok = 100; /* promena sadržaja promenljive broj na 100 preko pokazivača . umesto promena sadržaja promenljive broj
• broj = 100;
3/28/2011 8
DEKLARACIJA POKAZIVAČA
Pokazivač omogućava indirektan način pristupa vrednosti određenog podatka, i to pomoću adresa podatka u memoriji računara. Kako to funkcioniše na najjednostavnem primeru:
• int broj = 10, *pok;
3/28/2011 9
• Da bi se uspostavila veza između promenljivih broj ipok, koristi se operator (&) koji daje adresu odgovarajuće promenljive.
• pok = &broj
• Ovim je pridružena memorijska adresa promenljive broj pokazivaču pok, tj. sadržaj promenljive pok je adresa promenljive broj
3/28/2011 10
Vrednost promenljive broj pridružuje se nekoj drugoj promenljivoj npr x upotrebom promenljive pok, koristeći operator (*).
• x = *pok;
• ima isto značenje kao i:• x = broj;• tj. u jednom i drugom slučaju vrednost
promenljive x je 10.