ďťż

Ł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
  •