Pointeri (pokazivači) - objašenjenje

1

Pointeri (pokazivači) - objašenjenje

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4543

Došao sam do pokazivača u C++, ali mi nije baš sve najjasnije. Koliko sam razumeo, kada definišem neku vrednost mogu joj odrediti adresu i tip.

Evo primera:

#include<iostream> #include<cstdlib> int main() {    int x = 25;    int* p = &x;    std::cout << p << std::endl;    return 0; }

Rezultat:

001FF858

Kako da sam dodelim adresu kad odredim tip i vrednost promenljive?

I još nešto:

p1 = 0x4CC7EC5C;               /* изузетно је опасно и не препоручује се додјељивати адресе директно */

Zbog čega? Da li to ima neke veze sa kompajliranjem projekta / onemogućenjem normalnog rada programa ili šta već?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Citat:
Koliko sam razumeo, kada definišem neku vrednost mogu joj odrediti adresu i tip.

Ne mozes predvideiti adresu. Zasto bi je napamet lupao?



offline
  • Pridružio: 17 Jun 2012
  • Poruke: 727

@E.L.I.T.E. pogledaj ove linkove:

Tekst za link

Tekst za link

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4543

morando ::Citat:
Koliko sam razumeo, kada definišem neku vrednost mogu joj odrediti adresu i tip.

Ne mozes predvideiti adresu. Zasto bi je napamet lupao?


Nisam ja ni mislio da je predviđam, dakle ne mogu da napravim adresu za određeni podatak? To će uraditi program?

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Da.
Recimo imas neku promenljivu
char x = 'a';
Program ce staviti promenjljivu x u neku slobodnu "celiju" na steku, ta celija ima neku adresu, vrednost koju drzi ta celija na toj adresi je 'a'.
char* p = &x;
Program ce staviti promenjljivu p (pokazivac na char) u neku sledecu slobodnu celiju na steku, ta celija isto ima neku adresu, vrednost koju drzi ta celija je adresa x promenjljive.

Izrazi sa pokazivacima
*p  - vrednost na adresi gde pokazivac pokazuje p - vrednost pokazivaca, adresa gde pokazuje &p - adresa pokazivaca

Kad vec vezbas pokazivace preporucio bih ti da radis istovremeno i nizove jer su usko povezani.
Nadji neke proste zadatke i polako resavaj. Ako negde zaglibis ti se javi. Very Happy

offline
  • Osvjedodžbeni spretnik munjarstva
  • Pridružio: 04 Jul 2011
  • Poruke: 5424
  • Gde živiš: Beograd

Ja tebe stvarno ne razumem, pre nekoliko sati si pitao za div i mod funkcije, a sad si već stigao do pokazivača, i to još u dva različita jezika...


Pokazivač je u suštini varijabla, koja čuva memorijsku lokaciju drugog pokazivača, konstante, ili varijable. vrednost na koju jedan isti pokazivač pokazuje možemo da promenimo.

Što se tiče C jezika, često se primenjuju u funkcijama, tj. za prenos argumenata, razmenu vrednosti... Velika prednost im je i brzina. Razlog je to što se kod prenošenja preko pokazivača ne vrši kopiranje u samoj funkciji. Koriste se i za liste...

Pointere ti niko ne može objasniti ovako, potrebno je malo da se udubiš, velika je oblast njihove primene. Ono zašto ja zameram skoro svim autorima knjiga iz programiranja, je to što uzimaju totalno atipične primere kada objašnjavaju, pa samim tim i nećeš videti neku praktičnu primenu pointera.

offline
  • Fil  Male
  • Legendarni građanin
  • Pridružio: 11 Jun 2009
  • Poruke: 16486

Da se i ja upisem u temu smešak
http://www.mycity.rs/C/Analiza-situacije-Stomping-on-a-C-pointer.html

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4543

ivance95 ::Ja tebe stvarno ne razumem, pre nekoliko sati si pitao za div i mod funkcije, a sad si već stigao do pokazivača, i to još u dva različita jezika...


C++ izučavam duže vreme, a Pascal sam davno počeo da čim pa sam stao, pa ponovo nastavio. Jakoj e to zamršena priča smešak

@morando Ček, ček, dakle važi ovo:

char x = '30'; char* p = &x;

Dakle , podatak p će dobiti istu adresu kao i x? Jel' sam dobro shvatio?

Shocked Shocked




Čemu ovi hijeroglifi sad?!

Evo koda:

#include<iostream> #include<cstdlib> int main() {    char x = '25';    char* p  = &x;    std::cout << x << std::endl;    std::cout << p << std::endl;    return 0; }

A u drugom slučaju:



Samo sam promenio lokaciju zvezdice, sa char sam je prebacio na p.

Imate li možda neke zadatke koje ste vi rešavali kad se počinjali sa pokazivačima? Čisto da vidim kako mi ide, ali dobro, potražiću i sam nešto.

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Citat:
Čemu ovi hijeroglifi sad?!

Ukratko, ostream operator << interpretira pokazivac na char kao niz karaktera pa ti zato tako ispisuje.
Ako ces da ti ispise adresu na koju pokazuje onda ide malo drugacije:
std::cout << (uintptr_t)p << std::endl;

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4543

Napisano: 02 Maj 2013 14:03

Hvala na pomoći, dodao sam (uintptr_t) za ispisivanje ispred x i p i ispisalo mi je nešto sasvim drugačije, ali ovoga puta bar normalnije.



Dopuna: 02 Maj 2013 14:14

Sad sam shvatio! Hvala svima na strpljenju i uloženom vremenu Ziveli

Ko je trenutno na forumu
 

Ukupno su 652 korisnika na forumu :: 24 registrovanih, 4 sakrivenih i 624 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 8u47, _Sale, A.R.Chafee.Jr., Bane san, danilopu, komkom, ladro, LUDI, Marko Marković, Mercury, Milan A. Nikolic, mnn2, Rakenica, raskoljnikov, RJ, S2M, sabros, sakota79, segax1, shone34, Tamo neko, Trpe Grozni, VaRvArI 85, virked