• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rzutowanie wskaźnika?

0 głosów
2,993 wizyt
pytanie zadane 11 lutego 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
Witam! Spotkałem się z takim zapisem:

[...] (SOCKADDR*)sock [...]

 

Co on oznacza?

2 odpowiedzi

0 głosów
odpowiedź 11 lutego 2018 przez Knayder Nałogowiec (37,640 p.)
że sock, zostanie przerzutowany na SOCKADDR*
0 głosów
odpowiedź 11 lutego 2018 przez Sebastian Fojcik Nałogowiec (43,040 p.)
edycja 11 lutego 2018 przez Sebastian Fojcik

Słusznie się domyśliłeś. Jest to zwykłe rzutowanie jakiegoś typu na wskaźnik typu SOCKADDR. Przykładowy fragment kodu z użyciem tego: 

struct SOCKADDR
{
    int pole;
};

int main()
{
    SOCKADDR obiekt;
    void * wsk1 = &obiekt;
    SOCKADDR * wsk2 = (SOCKADDR*)wsk1;
    // Wspolczesna zalecana wersja
    SOCKADDR * wsk2 = reinterpret_cast<SOCKADDR*>wsk1;
}

Niżej pokazuję też rzutowanie przy pomocy specjalnego operatora. Pisząc programy w współczesnym C++ warto stosować te operatory. 

Zapytasz dlaczego. Przecież są długie w zapisie. Odpowiem: i o to właśnie chodzi. reinterpret_cast zawsze oznacza rzutowanie wskaźnika. Z daleka programista widzi co się dzieje w danej linijce kodu. Nie musiałbyś wtedy pisać tego pytania na forum :-)

No i rzutowanie to w ogóle nietypowa operacja i często jest źródłem wszelkiego rodzaju błędów w programach. Dlatego w C++ stosuje się te długie operatory. Pierwszy link z Google: http://strefakodera.pl/programowanie/c/operatory-rzutowania-w-c

komentarz 11 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
emm...

void *wsk1 [...]

 

Jakim cudem zmienna typu void?
komentarz 11 lutego 2018 przez draghan VIP (106,230 p.)
Nie jest typu void, tylko typu wskaźnikowego - void*. :) Dziedzictwo z C, gdzie jest używane do wprowadzenia swego rodzaju generyczności.
1
komentarz 11 lutego 2018 przez mokrowski Mędrzec (158,940 p.)

@Swipeyro, Traktuj to jako adres. W dodatku adres pozbawiony typu... i tyle (w uproszczeniu i na tym etapie uczenia się języka).

Podobne pytania

0 głosów
1 odpowiedź 964 wizyt
pytanie zadane 11 czerwca 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
2 odpowiedzi 749 wizyt
pytanie zadane 19 maja 2018 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 647 wizyt

93,664 zapytań

142,580 odpowiedzi

323,121 komentarzy

63,189 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...