Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

pointer na void
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
Gost






PostPostano: 23:18 uto, 25. 10. 2005    Naslov: pointer na void Citirajte i odgovorite

Imam problema sa castanjem varijable tipa void *. Naime, ovo jednostavno ne prolazi:

void *p;

(int *)p;
*p=5;

Kompajler uporno javlja dereferencing void pointer i invalid use of void, pa čak i nakon eksplicitnog casta u int *.
Izluđuje me :evil:
Imam problema sa castanjem varijable tipa void *. Naime, ovo jednostavno ne prolazi:

void *p;

(int *)p;
*p=5;

Kompajler uporno javlja dereferencing void pointer i invalid use of void, pa čak i nakon eksplicitnog casta u int *.
Izluđuje me Evil or Very Mad


[Vrh]
ahri
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07)
Postovi: (193)16
Sarma = la pohva - posuda
= 7 - 0

PostPostano: 23:37 uto, 25. 10. 2005    Naslov: Citirajte i odgovorite

kastao si posve korektno, ali to vrijedi samo za tu komandu...
u iducem redu [ *p = 5; ] cast vise ne vrijedi...


to je kao da napises

[code:1]int a=5;

a-1;

printf("%d", a);
[/code:1]

sad si u srednjoj liniji smanjio a za jedan, ali to je kao da si u toj liniji napisao 4; - nikakvog korisnog koda od toga. konstanta. :)

dakle,

[code:1]
void *p;

*((int *)p)=5;
[/code:1]
kastao si posve korektno, ali to vrijedi samo za tu komandu...
u iducem redu [ *p = 5; ] cast vise ne vrijedi...


to je kao da napises

Kod:
int a=5;

a-1;

printf("%d", a);


sad si u srednjoj liniji smanjio a za jedan, ali to je kao da si u toj liniji napisao 4; - nikakvog korisnog koda od toga. konstanta. :)

dakle,

Kod:

void *p;

*((int *)p)=5;



_________________
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
shokre
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 05. 2003. (20:05:09)
Postovi: (4A)16
Spol: muško
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 23:48 uto, 25. 10. 2005    Naslov: Citirajte i odgovorite

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]
Korisnički profil Pošaljite privatnu poruku YIM
ahri
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07)
Postovi: (193)16
Sarma = la pohva - posuda
= 7 - 0

PostPostano: 23:54 uto, 25. 10. 2005    Naslov: Citirajte i odgovorite

mozda se nadje jos netko tko bi mogao napisati isti odgovor, na jos jedan nacin! :)
mozda se nadje jos netko tko bi mogao napisati isti odgovor, na jos jedan nacin! :)



_________________
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
shokre
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 05. 2003. (20:05:09)
Postovi: (4A)16
Spol: muško
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 0:04 sri, 26. 10. 2005    Naslov: Citirajte i odgovorite

[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! Smile

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 Wink



_________________
~ Those who fear the Darkness have never seen what the Light can do! ~
[Vrh]
Korisnički profil Pošaljite privatnu poruku YIM
ahri
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07)
Postovi: (193)16
Sarma = la pohva - posuda
= 7 - 0

PostPostano: 0:48 sri, 26. 10. 2005    Naslov: Citirajte i odgovorite

ma salim se;).
btw, sto se tice nedeklariranog pointera: ni trazio da to objasnimo... :). tako da je zapravo tvoj post nepotrebno prosirenje koje zamagljuje srz problema! :)
ma salim se;).
btw, sto se tice nedeklariranog pointera: ni trazio da to objasnimo... :). tako da je zapravo tvoj post nepotrebno prosirenje koje zamagljuje srz problema! :)



_________________
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
shokre
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 05. 2003. (20:05:09)
Postovi: (4A)16
Spol: muško
Sarma = la pohva - posuda
= 5 - 0

PostPostano: 1:12 sri, 26. 10. 2005    Naslov: Citirajte i odgovorite

;)

Ajde da ne gadimo covjeku thread o pointerima sa nepotrebnim prepucavanjem, jer cemo mu samo zamagliti srz objasnjenja :)
Wink

Ajde da ne gadimo covjeku thread o pointerima sa nepotrebnim prepucavanjem, jer cemo mu samo zamagliti srz objasnjenja Smile



_________________
~ Those who fear the Darkness have never seen what the Light can do! ~
[Vrh]
Korisnički profil Pošaljite privatnu poruku YIM
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 1:19 sri, 26. 10. 2005    Naslov: Citirajte i odgovorite

[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! Smile


Me, me, me! Yu-huuuu!

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. Cool Npr. a++ ne daje isto ako je a tipa int ili neki pointer. Smile

Eh, a cast sluzi za "sada se ponasaj prema varijabli kao da je drugog tipa". Very cool Dakle, ne za promjenu tipa, nego samo za glumljenje tipa. Cool

U iscekivanju cetvrtog objasnjenja iste stvari... Angel



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
ahri
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07)
Postovi: (193)16
Sarma = la pohva - posuda
= 7 - 0

PostPostano: 1:23 sri, 26. 10. 2005    Naslov: Citirajte i odgovorite

vsego: ponekad te volim. jest da je rijetko, ali... :)
vsego: ponekad te volim. jest da je rijetko, ali... :)



_________________
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
Gost






PostPostano: 10:02 pet, 28. 10. 2005    Naslov: Citirajte i odgovorite

Zahvaljujem svima na pomoći. Ja sam stvarno zivio u uvjerenju da jedan cast od voida radi bilo sto, i to za stalno. (:oops: bilo je to krivo uže)
Fala još jednom!
Zahvaljujem svima na pomoći. Ja sam stvarno zivio u uvjerenju da jedan cast od voida radi bilo sto, i to za stalno. (Embarassed bilo je to krivo uže)
Fala još jednom!


[Vrh]
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan