10
08/27/22 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

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.

Page 2: Op11 10

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.

Page 3: Op11 10

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

Page 4: Op11 10

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

Page 5: Op11 10

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

Page 6: Op11 10

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.

• .

Page 7: Op11 10

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;

Page 8: Op11 10

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;

Page 9: Op11 10

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

Page 10: Op11 10

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.