10
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.

Op11 10

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

Page 1: Op11 10

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.

Page 2: Op11 10

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.

Page 3: Op11 10

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

Page 4: Op11 10

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

Page 5: Op11 10

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

Page 6: Op11 10

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.

• .

Page 7: Op11 10

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;

Page 8: Op11 10

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;

Page 9: Op11 10

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

Page 10: Op11 10

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.