Poslao: 01 Maj 2013 15:34
|
offline
- E.L.I.T.E.
- Legendarni građanin
- Pridružio: 23 Maj 2012
- Poruke: 4575
|
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.
|
|
Poslao: 01 Maj 2013 16:02
|
offline
- morando
- Građanin
- 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?
|
|
|
|
|
Poslao: 01 Maj 2013 17:34
|
offline
- E.L.I.T.E.
- Legendarni građanin
- Pridružio: 23 Maj 2012
- Poruke: 4575
|
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?
|
|
|
|
Poslao: 01 Maj 2013 18:12
|
offline
- morando
- Građanin
- 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.
|
|
|
|
Poslao: 01 Maj 2013 19:22
|
offline
- ivance95
- AMF pripravnik
- Pridružio: 04 Jul 2011
- Poruke: 5424
|
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.
|
|
|
|
|
Poslao: 02 Maj 2013 10:37
|
offline
- E.L.I.T.E.
- Legendarni građanin
- Pridružio: 23 Maj 2012
- Poruke: 4575
|
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
@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?
Č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.
|
|
|
|
Poslao: 02 Maj 2013 11:57
|
offline
- morando
- Građanin
- 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;
|
|
|
|
|