• 32 odgovora
  • 17.040 pregleda
Pokazivaci(eng. pointeri) 14.03.2006. u 21:28 · pre 250 meseci #1
Moze li mi neko detaljno objasniti sto su pokazivaci i prikazati njihovu prakticnu primjenu.
Shvacam da pokazivaci zapravo pokazuju na neku adresu u memoriji,ali mi nije jasno kada se primjenjuju i cemu zapravo sluze.
Molim bez odgovora tipa google i bilo je vec na forumu.
Hvala
Re: Pokazivaci(eng. pointeri) 15.03.2006. u 15:48 · pre 250 meseci #4
Može li netko dati neki primjer koda ali kod gui, a ne konzolnih aplikacija?
Re: Pokazivaci(eng. pointeri) 16.03.2006. u 10:04 · pre 250 meseci #5
Primjer kako preko pokazivaca mjenjas vrijednost argumentima:

void test (int* x, int* y)
{
*x=5;
*y=22;
}

int var1 = 4;
int var2 = 17;

printf("vrednost prije var1=%d, var2=%d\n', var1, var2);
test (&var1,&var2);
printf("vrednost posle var1=%d, var2=%d\n', var1, var2);



[Ovu poruku je menjao ljube dana 16.03.2006. u 11:05 GMT+1]
Potpis
http://www.padfm.com
Re: Pokazivaci(eng. pointeri) 16.03.2006. u 10:13 · pre 250 meseci #6
Zasto da napisem preko pokazivaca kad mogu i ovako:
x=5;
y=25;

Koja je razlika??
Re: Pokazivaci(eng. pointeri) 16.03.2006. u 10:32 · pre 250 meseci #7
Ako ne pišeš preko pokazivača, menja se samo vrednost (kopija) vrednosti x i y. Vrednosti var1 i var 2 ostaju nepromenjene.
Da bi promenio vrednosti var1 i var2 potrebno je da koristiš pokazivače.
Najprostiji primer ti je SWAP f-ja. F-ja koja zameni 2 broja.

Code:

void swap (int *px, int *py){
int temp;
temp = *px;
*px = *py;
*py = temp;
}


Ako ne bi radio s pointerima

Code:

void swap (int px, int py){
int temp;
temp = px;
px = py;
py = temp;
}


Promenio bi samo vrednosti px i py unutar samo f-je, a vrednosti x i y, odnosno var1 i var2 bi ostale nepromenjene.
Zato korisitiš pointer koji pokazuje na vrednosti var1 i var2 i samo preko njih možeš da promeniš njihove vrednosti unutar funkcije.

Mnoogo su opširni pointeri da bi ti to neko objašnjavao na forumu. Imaš pointer na neku vr. Pa pointer na pointer, pa pointer na funkciju, pa pointer kao argument f-je što je isto kao i "običan" pointer pa...

[Ovu poruku je menjao Pharos dana 16.03.2006. u 11:38 GMT+1]
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Pokazivaci(eng. pointeri) 16.03.2006. u 11:10 · pre 250 meseci #8
Posto su pokazivaci najveca prednost i mogucnost C++a imam velku volju ih naucit,pa..
Idem se primit knjige,nadam se da cu shvatit
Hvala na odgovorima,
Pozdrav
Re: Pokazivaci(eng. pointeri) 16.03.2006. u 14:23 · pre 250 meseci #10
Citat:

Ako ne pišeš preko pokazivača, menja se samo vrednost (kopija) vrednosti x i y.
Vrednosti var1 i var 2 ostaju nepromenjene. Da bi promenio vrednosti var1 i var2
potrebno je da koristiš pokazivače.


Postoji jos jedan *vazan* vid upotrebe pokazivaca kada se koriste za prenos
argumenata funkciji, a ne odnosi se na menjanje ili nemenjanje tih proslednjenih
podataka.

Brzina.

Kada se argumenti prenose preko pokazivaca - nema internog kopiranja tih
vrenosti u funkciji - pa je i kod brzi, pogotovo ako se radi o nekoj funkciji
koja se koristi u nekoj petlji.

Dakle, kada vidis nesto kao (const + pointer):

Code:

void funkcija ( const int *x, const int *y )
{
   // ...
}


To obicno znaci, "pointere koristim radi brzine a const da naznacim da x i y
nisu za menjanje."

Inace, pointeri pocetnicima nisu jasni jer su primeri u skoro svim knjigama koje
sam imao - totalno atipicni u realnom programiranju, pa stoga i ne ostavljaju
puno prostora da se dodje do nekog logicnog zakljucka.

Re: Pokazivaci(eng. pointeri) 17.03.2006. u 09:40 · pre 250 meseci #13
Lancane liste odavno podrzava STL standard, tako da je sve dovedeno na upotrebni nivo.

Re: Pokazivaci(eng. pointeri) 15.04.2006. u 11:17 · pre 249 meseci #14
Pa osnovna prednost lancanih lista je sto mogu biti "pretumbane" u memoriji...Ako se rade bez pokazivaca sve nekako gubi smisao...Zbog cega onda ne napraviti najobicniji niz bez obzira bila to lista, ili sablo, ili sta god...?Zaboravljate prednost pokazivaca da funkciji prosledi "pravi" parametar, tj. da funkcija radi direktno sa njim...Tako maltene svaka funkcija moze biti void, a vrednost odredjenog parametra (ukoliko se koriste pokazivaci, naravno) ce ipak biti promenjena......

[Ovu poruku je menjao PeRuN_RoJs dana 15.04.2006. u 12:18 GMT+1]
Potpis
Don't look at me, I'm lost too.....
Re: Pokazivaci(eng. pointeri) 15.04.2006. u 11:21 · pre 249 meseci #15
Recimo :

Code:

void AddTwo (int *pointer)
{
*pointer+=2;
}

void main ()
{
int x=4;
AddTwo (&x);
printf ("%i",x);
}


Dakle ispisuje 6!Zar ne?

=]

[Ovu poruku je menjao PeRuN_RoJs dana 15.04.2006. u 12:24 GMT+1]
Potpis
Don't look at me, I'm lost too.....
Re: Pokazivaci(eng. pointeri) 17.04.2006. u 16:27 · pre 249 meseci #16
Mala digresija - "pointeri" nije engleska rec, vec srpska/hrvatska/srpskohrvatska (kako ko voli). Egleska rec bi bila "pointers".
Potpis
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Re: Pokazivaci(eng. pointeri) 17.04.2006. u 16:37 · pre 249 meseci #17
Ako cemo bas da "cepidlacimo", nije ni srpska vec uvedenica iz engleskog...

Potpis
Don't look at me, I'm lost too.....
Re: Pokazivaci(eng. pointeri) 18.04.2006. u 21:51 · pre 249 meseci #18
pokusat cu malo razjasniti stvar. Oni su jedna mala zajebana stvar. i najcesce se na njima grijesi. Ako ih se nauci koristiti, nevjerojatno su mocna stvar. Po meni ih je najbolje koristiti za nabrijavanje algoritma pošto s njim imate direktni pristup radnoj memoriji. U kombinaciji sa struct-ovima su zaista nevjerojato močna stvar. Sa Structovima i pointerima pravis direktne vezane liste ili bilo koje strukture podataka. Kako ces ti to sve primjenjivat, ovisi o samom zadatku koji imas za ispunit. U vecini slucajeva ti se obrada podataka svodi na rad s poljima. Problem u poljima je taj sto tocno morac odrediti kolicinu polja koju ces koristiti kao maximalni broj. S strukturama podataka, koje stvarujes pomocu pointera, nisi limitiran memorijom koju si alocirao preko polja nego mozes ici u beskonacnost (velicina memorije). Sa pointerima tako sa vezanom listom mozes mnogo brze sortirati elemente u mnogo manje koraka nego sto bi to mogao sa poljima.
npr: Enigma- simulator kriptografskog stroja iz 2. sv rata
Ona ima 3 rotora koji svaki ima po dvije abecede od 26 elemenata te slican reflektor te slicane utikace. radi se o tome da to rijesavas poljima, ti svaku promjenu vrijednosti moras praviti neko prepisivanje iz varijable u varijablu. Svako to prepisivanje ima niz koraka koje komp mora odraditi. Pointerom ti samo preusmjeravas vrijednosti. Radit ce ti brze zato sto je preusmjeravanje pointera manje zahtjevno za komp nego kopiranje iz varijable u varijablu
Re: Pokazivaci(eng. pointeri) 18.04.2006. u 22:20 · pre 249 meseci #19
Citat:
@zrael: Problem u poljima je taj sto tocno morac odrediti kolicinu polja koju ces koristiti kao maximalni broj. S strukturama podataka, koje stvarujes pomocu pointera, nisi limitiran memorijom koju si alocirao preko polja nego mozes ici u beskonacnost (velicina memorije).


Jesi ti cuo za dinamicko alociranje i dinamicko realociranje?
Potpis

Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
Re: Pokazivaci(eng. pointeri) 19.04.2006. u 09:56 · pre 249 meseci #20
A sta ti hoces da kazes sa tim tvojim "jesi cuo ti za..." pitanjem?
Citat:
@zrael:S strukturama podataka, koje stvarujes pomocu pointera, nisi limitiran memorijom koju si alocirao preko polja nego mozes ici u beskonacnost (velicina memorije).

Ocigledno da je cuo, jer iz ovog gore sledi da zna da alocira jos memorije kad mu treba.

Mislim, nije to najsrecnije napisan post na svetu, daleko od toga, ali cemu takvo pitanje kad nisi ni procitao sve?
Potpis
Mass murder ain’t just painless,
Now we’ve made it cute.


The Church Of The Holy Transistor
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme