Quantcast

Pointeri C++

Peruzzi

Domaćin
Poruka
3.962
mogu da ti objasnim cemu sluze u C-u. Otprilike isto rade i u C++-u

Prica je malo slozenija ali ukratko izgleda ovako nekako:

Kada se program pokrene on se kompletan stavi u memoriju (virtuelnu = cache + ram + hdd = 4GB na 32b arhitekturi). Kompletan u smislu da se ucitavaju sve funkcije, ne samo main (iako se one pozivaju tek tamo negde kasnije).

Pokazivac je promenljiva koja u sebi sadrzi adresu u memoriji. Na toj adresi nalazi se neki podatak. Zgodna je stvar sto pokazivac moze da pokaze i na funkciju, tj. adresu gde funkcija pocinje, pa se funkcija moze pozvati i preko pokazivaca. Takodje, niz je u stvari pokazivac na prvi (tj. nulti) element niza (jer su podaci u nizu spakovani redno - jedan za drugim).

Kako sve ovo radi?

Pokazivac se inicijalizuje isto kao i svaka druga promenljiva. Tip pokazivaca je u stvari tip podatka na koji on pokazuje. Evo ti jedan primer
Kod:
int a=3;   // pravi se promenljiva a tipa int, dobija vrednost 3
int* pokazivac_na_a = &a;   // pravi se pokazivac na int, dobija adresu od a (sa & dobijas adresu promenljive)
*pokazivac_na_a = 4;    // pokazana vrednost dobija vrednost 4, tj. isto sto i a=4
pokazivac++;    // vrednost pokazivaca se menja, tj. pokazivac sad pokazuje na sledece polje u memoriji

Ovo ne bi trebalo da bude tesko za sad.

Kako to funkcionise sa nizom?

int niz[10];    // pravi se niz sa deset int-ova. preciznije, alocira se 10 susednih lokacija u memoriji za int, a niz pokazuje na prvu

*niz = 1;   // isto sto i niz[0]=1;
niz++;
*niz = 1;  // isto sto i niz[1]=1;
*niz++;   // isto sto i niz[1]++;
Ako hoces da pokazivac ne pokazuje ni na sta onda mu das vrednost NULL.

Cemu sluze pokazivaci?
Za pravljenje nizova neodredjene duzine - napravis slog koji sadrzi pokazivac na prethodni element, pokazivac na seledeci element i promenljivu clanicu niza. Ovo se zove dvostruko povezana lista.
Zatim za visedimenzionalne nizove, za prenosenje funkcije kao argument drugoj funkciji (npr za qsort funkciju za pretrazivanje jedan od argumenata je pokazivac na funkciju koja uporedjuje koji je od dva elementa veci)

Ovo je inace osetljiva tema pocetnicima (a i ja se trenutno mucim malo sa tim) i trebalo bi da je dobro proucis i shvatis kako radi. Verujem da ima dosta dobrih tutorijala i knjiga koje pokrivaju ovu temu, na srpskom. Potrazi medju izdanima Mikro knjige, CET-a. Mislim da je cak i krug izdao par dobrih knjiga za matematicku gimnaziju, tamo bi trebalo to da se uci u okviru C-a
 

Top