Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 16

Pokazivači

Milenković Anđela E32


O pokazivačima

Definisanje pokazivača

Pokazivači kao argumenti funkcije

Pokazivači i adrese

Pokazivači i nizovi
Pokazivači i još po nešto u uvodu

Operativna memorija je niz memorisjkih lokacija koje su numerisane celim


brojevima 0, 1, 2, ... m-1, gde je m kapacitet memorije.

Char u 1 bajt;
Short int u 2 bajta;
Long int i float u 4 bajta;
Double u 8 bajtova.

*Kada neki podatak zauzima više bajtova, pod adresom


podatka podrazumeva se bajt sa majmanjim rednim brojem.
Pokazivači obično zauzimaju 2 ili 4 bajta. Broj bajtova koje zauzima pokazivač ne
zavisi od broja bajtova koji zauzimaju pokazivani podaci, već od mogućeg opsega
adresa na drugom računaru.

Pokazivač predstavlja ptomenljivu specijalnog tipa u nekim


programskim jezicima poput C-a, C++-a, Paskala itd. Pokazivači služe
za direktan pristup memoriji računara.
Unarni operator & - “adresa od”

Idirektni operator * - “sadržaj objeta na koji pokazuje pokazivač”

Pokazivač se često koristi jer


-se jedino sa pokazivačima mogu izvesti neki računi i programske tehnike;
-se dobija kompaktni i efikasni rad.

!Ako se nepravilno koristi može doći do velikih grešaka u programu.!


Definisanje pokazivača
Pokazivač na promenljivu tipa int se definiše kao: int* pokazivac.
Isto je i za ostale tipove:
double* pok;
float* pok;
char* pok.

Pokazivači su način komunikacije potprograma, kada oni daju adresu


njihovih promenljivih jedni drugima kako bi mogli drugi da im
pristupaju i da ih menjaju.
Primer:

int *a, b, c[10], *d, e;

-definisani su:
•Dva pokazivača “a” i “d”;
•Jedan niz od 10 celih brojeva “c”;
•Dve promenljive “b” i “e”.

Pored pokazivača na podatke poznatih tipova, postoje i generički podaci kod


kojih nije određen tip pokazivanih podataka. Generički podaci se definišu
stavljanjem službene reči void umesto tipa pokazivanih podataka i pomoću
njih se ne može pristupiti podacima.
Pokazivači kao argumenti funkcije
Npr.
Funkcija za sortiranje treba da međusobno zameni vrednosti dvema promenljivima
korišćenjem funkcije zameni, koja je definisana kao:

void zameni (int a, int b)


{
int pom;
pom=a,
a=b, POGREŠNO
b=pom; (poziv funkcije bi bio zameni (x, y))
}

void zameni (int* pa, int* pb)


{
int pom;
pom=*pa;
*pa=*pb; ISPRAVNO
*pb=pom; (poziv funkcije bi bio zameni (&x, &y))
}
x
pa

y pb

Šematski prikaz prosleđivanja pokazivača u funkciji


Pokazivači i adrese
Kako vi u programu možete saznati na kojoj se adresi nalazi
neka promenljiva?
int x=5, y=1, z[20];
int broj; int* p;
broj=11; p=&x;
printf(“Vrednost promenljive je %d\n”, broj); y=*p;
printf(“Adresa promenljive je %d\n”, &broj); *p=0;
p=&z[0]

Ukoliko pokazivač pokazuje na celobrojnu promenljivu x, *p se može pojaviti u bilo


kom kontekstu gde bi se moglo pojaviti i x.
Npr.:
*p=*p+12;
-uvećava *p za 12, a samim tim uvećava i x za 12.
program Ne čuvaju brojeve ili slova, već adrese!

Potprogram 1 Potprogram 2

“Hej, potprograme 2, da li možeš da mi “Naravno, reci mi samo koja je adresa


popraviš promenljivu x?” promenljive da bih mogao da je nadjem u
memoriji.”

Potprogram 1 Potprogram 2

“Naravno, adresa x je &x.” “Super, sada ću tu adresu napisati u pokazivač.


Vidim je, pristupam joj uz pomoć pokazivača i
menjam je. Popravljena!”
Kada se ima adresa, koja je unutar nekog pokazivača, može se uz pomoć operacije DEREFERENCIRANJA dobiti
pristup memoriji - promenljivoj na koju pokazivač pokazuje.

Dereferenciranje je proces u kome se preko pokazivača koji već pokazuje neku


memorijsku lokaciju pristupa samoj lokaciji, bilo radi čitanja njene vrednosti, bilo radi
njenog menjanja.
Pokazivači i nizovi
Deklaracija

int a[10];

definiše niz a veličine, odnosno niz od 10 uzastopnih celih brojeva a[0], a[1], ...,
a[9].

a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

Šematski prikaz niza a u memoriji računara.


int *p;
p=&a[0];
x= *p;
p •

a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

Pokazivač p pokazuje na nulti elemenat niza a.

p • p+1 p+2

a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

Pristupanje elementima niza pomoću pokazivača.


Hvala na pažnji!

You might also like