Ĺadny brzuch
czy da sie i jak przesunac wskaznik VOID* o X bajtow ?
czy da sie i jak przesunac wskaznik VOID* o X bajtow ?
A na co Ci wskaźnik void*? Właśnie dlatego, że jest void to nie da się go przesuwać bezpośrednio o określoną ilość bajtów. Możesz to zrobić niebezpośrednio, np tak:
void* ptr = jakis_adres;
ptr = reinterpret_cast<void*>(reinterpret_cast<unsigned long>(ptr) + ile_bajtow);
albo tak:
ptr = static_cast<typ_w_static_cast*>(ptr) + ile_rozmiarow_obiektow;
Pierwszy przykład przesunie o ile_bajtow bajtów, a drugi o ile_rozmiarow_obiektow*sizeof(typ_w_static_cast);
Real_Noname: właśnie nie da się tego tak zrobić - powód jest prozaiczny: typ void nie ma określonego rozmiaru, więc ptr + 10, które znaczy:
ptr + 10*sizeof(typ_wskazywany) jest niepoprawną instrukcją. Dlatego nie można przesuwać sobie tak po prostu wskaźnika void*, bo kompilator nie wie o ile.
Użytkownik TeMPOraL edytował ten post 11 czerwiec 2005, 19:48
dzieki za odpowiedzi, pozniej sprawdze
A po kiego ci przesuwać wskaźnik typu void??
A na co Ci wskaźnik void*?
chodzi o to ze mam w pamieci pewne dane i mam we wskazniku VOID* adres do nich i musze teraz zmienic fragment z nich.
dzieki za odpowiedzi, pozniej sprawdze
chodzi o to ze mam w pamieci pewne dane i mam we wskazniku VOID* adres do nich i musze teraz zmienic fragment z nich.
A nie lepiej skorzystać z naklejki? ( template ) Wtedy raz określisz typ podczas dzialania i nie bedziesz mial problemow z roznymi typami.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
czy da sie i jak przesunac wskaznik VOID* o X bajtow ?

A na co Ci wskaźnik void*? Właśnie dlatego, że jest void to nie da się go przesuwać bezpośrednio o określoną ilość bajtów. Możesz to zrobić niebezpośrednio, np tak:
void* ptr = jakis_adres;
ptr = reinterpret_cast<void*>(reinterpret_cast<unsigned long>(ptr) + ile_bajtow);
albo tak:
ptr = static_cast<typ_w_static_cast*>(ptr) + ile_rozmiarow_obiektow;
Pierwszy przykład przesunie o ile_bajtow bajtów, a drugi o ile_rozmiarow_obiektow*sizeof(typ_w_static_cast);
Real_Noname: właśnie nie da się tego tak zrobić - powód jest prozaiczny: typ void nie ma określonego rozmiaru, więc ptr + 10, które znaczy:
ptr + 10*sizeof(typ_wskazywany) jest niepoprawną instrukcją. Dlatego nie można przesuwać sobie tak po prostu wskaźnika void*, bo kompilator nie wie o ile.
Użytkownik TeMPOraL edytował ten post 11 czerwiec 2005, 19:48
dzieki za odpowiedzi, pozniej sprawdze
A po kiego ci przesuwać wskaźnik typu void??
A na co Ci wskaźnik void*?
chodzi o to ze mam w pamieci pewne dane i mam we wskazniku VOID* adres do nich i musze teraz zmienic fragment z nich.
dzieki za odpowiedzi, pozniej sprawdze
chodzi o to ze mam w pamieci pewne dane i mam we wskazniku VOID* adres do nich i musze teraz zmienic fragment z nich.

A nie lepiej skorzystać z naklejki? ( template ) Wtedy raz określisz typ podczas dzialania i nie bedziesz mial problemow z roznymi typami.
