Prikaz jedne poruke
Stara 26.1.2013, 22:30   #149
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: How to... C++

Ne postoje glupa pitanja.

Koncept pointera zna da bude dosta stran ljudima zbog toga što malo ko ume da ga pravilno objasni.

Po definiciji, pointer (pokazivač) je variabla u kojoj se nalazi adresa memorijske lokacije. Šta to znači? Poprilično podenostavljen primer i analogija jeste da imaš parče papira na kome je napisana adresa nečega (mesto, ulica, broj). Taj papir je pointer, a on pokazuje na kuću koja se nalazi na datoj adresi.

Koriste se za dosta stvari, pre svega zbog performansi, ali na primer, u C-u, da bi uradio neke stvari nemaš previše izbora? C je jezik jako niskog nivoa, samim tim nisi ograničen nekim paradigmama, radiš poprilično blizu nativnom nivou.

Na primer, C ne podržava stringove nativno, samim tim moraš da koristiš nizove znakova:

Kod:
char[] yo = "yo!";
char  *yo = "yo!";
Primeri iznad su potpuno ekvivalentni, ali evo nesto jednostavnije:

Kod:
int a = 123;
int *b = &a;
Prva linija jednostavno dodeljuje varijabli a vrednost 123.
U drugoj liniji, b je zapravo pointer, kome smo koristeći operator (&) dodelili adresu od a, što znači, adresu memorijske lokacije u kojoj je smeštena vrednost 123.

Kada bi uradio sledeće:
Kod:
printf("%d", b);
Ne bi se ispisalo 123, već sama adresa u memoriji na kojoj se 123 nalazi.

Da bi dobio vrednost sa te adrese (123), koristi se operator *
Kod:
printf("%d", *b);
Za drugi deo tvog pitanja, pointeri mogu da pokazuju na gotovo sve, na primer, kada uradis malloc() (funkcija za alokaciju memorije), ona ti vraća pointer na novoalocirani memorijski blok. Analogno tome, free() funkcija uzima kao parametar pointer koji označava koji memorijski blok se dealocira.

Još jedan primer, pointere možeš da koristiš sa nizovima (kao char* od malopre), i da se samom inkrementacijom istog krećeš kroz niz, npr:

Kod:
char *yo = "yoyoyoyo";
while(*yo) {
printf("%c", *yo);
yo++;
}
... jer sama variabla yo sadrži adresu prvog karaktera.

Pointere u C-u ćeš naći svugde, tako da bolje pogledaj dokumentaciju onoga šta te interesuje i videćeš.

Što se tiče tvog problema oko pointera i adresa, adresa je samo broj koji označava lokaciju nečega u memoriji, tako da baš i ne možeš da ih porediš, jer pointer sadrži adresu, koja je sama po sebi neka vrednost. Uvek možeš da imaš pointer, koji pokazuje na neki drugi pointer, a taj drugi pointer pokazuje na neku vrednost - sasvim legitimno.

Možda si mislio na razliku između pointera i referenci u C++?
MG-RAY je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku MG-RAY na korisnoj poruci:
PeTkO (27.1.2013)