Evo ti kratko objašnjenje pošto moram da palim u grad :D
Dakle, sigurno si već u svojoj knjizi pročitao da se pointeri definišu kao "pokazivači na memorijsku adresu". Da, znam kako to zvuči :D.
Suština pointera je - oni ne sadrže vrednost. Ti si navikao da u paskalu napraviš neku integer promenljivu i, recimo, dodeliš joj vrednost 3. Takva promenljiva zauzme mesto u memoriji na određenoj memorijskoj adresi. Pointeri ne sadrže vrednost, nego poziciju memorijske adrese.
Evo primera u C-u, odnosno C++-u:
Code:
int a = 4; // a = 4
int *b = &a; // b = &a , ovo & je tzv. reference operator, odnosno operator koji uzima memorijsku adresu neke promenljive
cout << a << endl;
cout << b << endl;
Primetićeš da se u prvom redu ispisuje broj 4, a u drugom neku bezveznu heksadecimalnu vrednost. Ta vrednost je memorijska adresa tvoje promenljive a.
E sad, sve je to cool i pointeri služe za manipulaciju memorijskim adresama. Ali, šta će to tebi? Pa, evo ti jednostavan odgovor.
Code:
int a = 4;
int *b = &a;
*b = 8; // ovo je tzv. dereference operator, odnosno operator koji uzima vrednost iz memorijske adrese neke promenljive
cout << a << endl;
Ovde primećuješ da si promenio vrednost b (koji je pointer na promenljivu a), a da se zapravo promenila promenljiva a!
Što znači da kada ti treba recimo, funkcija za sabiranje, pointeri su jako korisni jer:
Code:
int DodajJedan(int a)
{
return a + 1;
}
void DodajJedanPrekoPointera(int* a)
{
*a += 1;
}
int main()
{
int broj = 5;
DodajJedan(broj);
DodajJedanPrekoPointera(&broj);
}
Ovde će nakon manipulacije promenljiva broj sadržati vrednost 6. Kada baciš oko na kod, vidiš da funkcija koja dodaje 1 na promenljivu preko pointera nema povratnu vrednost, već direktno manipuliše promenljivom. To povećava brzinu izvršavanja tvog programa i smanjuje zauzeće memorije. Naravno, u ovom slučaju to ti ne pomaže mnogo, ali u radu sa velikim količinama memorije pointeri su nezamenljivi.
Pointeri, međutim, mogu biti jako opasni ukoliko se ne koriste kako treba.
Ovo su ti samo neke osnovne informacije, ima tu još mnogo toga, pa ako hoćeš, pošalji mi PM pa da ti dam MSN adresu ili nešto slično ako ti treba neko dodatno objašnjenje.
Pozdrav
SLIder.