Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Gost
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
shokre Forumaš(ica)


Pridružen/a: 11. 05. 2003. (20:05:09) Postovi: (4A)16
Spol: 
|
Postano: 23:48 uto, 25. 10. 2005 Naslov: |
|
|
Cini mi se da krivo shvacas casting.
Koliko sam ja shvatio, cini mi se da ti mislis da kad napises "(int *)p;" da to podrazumjeva da se od te linije nadalje "p" smatra "int *". Stvar je u tome da to nije tocno. "p" je uvijek "void *", a castom ti u jednoj liniji mozes "promjeniti nacin gledanja na p".
Naravno, tu dolazi i pitanje toga na sto ti "void *p" pokazuje nakon deklariranja pointera. Greska koju si napravio je standardna greska poznata kao "Neinicijalizirani pointer". Kad ga deklariras, a ne kazes mu na sto da pokazuje i probas ga koristiti, program se obicno rusi.
Dakle, ispravan kod bi ti bio nesto od sljedeca 2 primjera:
[code:1]void *p;
p = (void *) malloc( sizeof( int ) );
*((int *)p) = 5;[/code:1]
[code:1]int broj;
void *p = &broj;
*((int *)p) = 5;[/code:1]
Cini mi se da krivo shvacas casting.
Koliko sam ja shvatio, cini mi se da ti mislis da kad napises "(int *)p;" da to podrazumjeva da se od te linije nadalje "p" smatra "int *". Stvar je u tome da to nije tocno. "p" je uvijek "void *", a castom ti u jednoj liniji mozes "promjeniti nacin gledanja na p".
Naravno, tu dolazi i pitanje toga na sto ti "void *p" pokazuje nakon deklariranja pointera. Greska koju si napravio je standardna greska poznata kao "Neinicijalizirani pointer". Kad ga deklariras, a ne kazes mu na sto da pokazuje i probas ga koristiti, program se obicno rusi.
Dakle, ispravan kod bi ti bio nesto od sljedeca 2 primjera:
Kod: | void *p;
p = (void *) malloc( sizeof( int ) );
*((int *)p) = 5; |
Kod: | int broj;
void *p = &broj;
*((int *)p) = 5; |
_________________ ~ Those who fear the Darkness have never seen what the Light can do! ~
Zadnja promjena: shokre; 0:05 sri, 26. 10. 2005; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
shokre Forumaš(ica)


Pridružen/a: 11. 05. 2003. (20:05:09) Postovi: (4A)16
Spol: 
|
Postano: 0:04 sri, 26. 10. 2005 Naslov: |
|
|
[quote="ahri"]mozda se nadje jos netko tko bi mogao napisati isti odgovor, na jos jedan nacin! :)[/quote]
Ajde, ajde, nemoj se ljutiti. Otvorio sam prozor za reply prije nego si ti nesto napisao, ali sam imao nekog drugog posla pa sam tek kasnije odgovorio. Ali ako cemo bas toliko cjepidlacit, tvoj primjer nije uzeo u obzir da je "void *p" neinicijaliziran, tako da je moj odgovor prosirenje tvog ;)
ahri (napisa): | mozda se nadje jos netko tko bi mogao napisati isti odgovor, na jos jedan nacin!  |
Ajde, ajde, nemoj se ljutiti. Otvorio sam prozor za reply prije nego si ti nesto napisao, ali sam imao nekog drugog posla pa sam tek kasnije odgovorio. Ali ako cemo bas toliko cjepidlacit, tvoj primjer nije uzeo u obzir da je "void *p" neinicijaliziran, tako da je moj odgovor prosirenje tvog
_________________ ~ Those who fear the Darkness have never seen what the Light can do! ~
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
shokre Forumaš(ica)


Pridružen/a: 11. 05. 2003. (20:05:09) Postovi: (4A)16
Spol: 
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 1:19 sri, 26. 10. 2005 Naslov: |
|
|
[quote="ahri"]mozda se nadje jos netko tko bi mogao napisati isti odgovor, na jos jedan nacin! :)[/quote]
Me, me, me! :yuhu:
Dakle, deklaracija varijable sluzi compileru i to za:
- alokaciju odredjene kolicine memorije (slicno onome sto ti dinamcki radis sa [tt]malloc()[/tt]) i
- da zna kako ce se "ponasati" prema nekoj varijabli. 8) Npr. [tt]a++[/tt] ne daje isto ako je [tt]a[/tt] tipa [tt]int[/tt] ili neki pointer. :)
Eh, a cast sluzi za "sada se ponasaj prema varijabli [b]kao[/b] da je drugog tipa". :verycool: Dakle, [b]ne[/b] za promjenu tipa, nego samo za [b]glumljenje[/b] tipa. 8)
U iscekivanju cetvrtog objasnjenja iste stvari... O:)
ahri (napisa): | mozda se nadje jos netko tko bi mogao napisati isti odgovor, na jos jedan nacin!  |
Me, me, me!
Dakle, deklaracija varijable sluzi compileru i to za:
- alokaciju odredjene kolicine memorije (slicno onome sto ti dinamcki radis sa malloc()) i
- da zna kako ce se "ponasati" prema nekoj varijabli. Npr. a++ ne daje isto ako je a tipa int ili neki pointer.
Eh, a cast sluzi za "sada se ponasaj prema varijabli kao da je drugog tipa". Dakle, ne za promjenu tipa, nego samo za glumljenje tipa.
U iscekivanju cetvrtog objasnjenja iste stvari...
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
|