Upload
dejan-marinkovic
View
22
Download
4
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
04/10/23 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.
04/10/23 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 dodeljuje adresu 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.
04/10/23 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 dodeljivanja pi = &i j = *piImaju isti efekat kao j = i
04/10/23 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
04/10/23 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
04/10/23 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.
• .
04/10/23 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;
04/10/23 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;
04/10/23 9
• Da bi se uspostavila veza između promenljivih broj i pok, 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
04/10/23 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.