Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

konwersja typu wskaźnika za pomocą operatora reinterpret_cast

Ostatnio zmodyfikowano 2016-05-05 09:20
Autor Wiadomość
lukasz427
Temat założony przez niniejszego użytkownika
konwersja typu wskaźnika za pomocą operatora reinterpret_cast
» 2016-05-02 21:22:58
Witam

Poniżej mam prosty program, w którym ustawiam wsk_double do doublów na to co pokazuje wsk_int do pokazywania na obiekty int:

wsk_double = reinterpret_cast<double*>(wsk_int);

 Wsk_double został ustawiony na to co pokazuje wsk_int

(Wskaźnik wsk_int został wcześniej ustawiony na zmienną "a", która została inicjalizowana wartością 1.)

Moje pytanie brzmi:

dlaczego odnosząc się następnie  do zmiennej "a" poprzez instrukcję:

*wsk_double = 17.79;

nie zmieniam jej wartości?

Rozumiem,że są innego typu  w takim razie dlaczego nie zaokrągla i nie wychodzi np. a= 17?

Czy za pomocą operatora reinterpret_cast stosowanego w takim przypadku nie można odnieść się do obiektu w ten sposób?

Z góry dziekuję.




C/C++
#include <iostream>
using namespace std;

int main()



{
    int a = 1;
    double b = 2.28;
   
    int * wsk_int;
    wsk_int = & a;
   
    cout << "wsk_int = " <<( * wsk_int ) << endl;
   
   
    double * wsk_double;
   
    wsk_double = reinterpret_cast < double *>( wsk_int ); // tutaj odnosze się do adresu wskazywanego
    // przez wsk_int(ustawiam wsk_double na to co pokazuje wsk_int)
   
   
    * wsk_double = 17.79; //przypisuje nowa wartosc do zmiennej a
    cout << "wsk_double = " <<( * wsk_double ) << endl;
   
   
   
    cout << "a = " << a << endl;
}
P-147887
pekfos
» 2016-05-03 00:35:23
Ten program ma niezdefiniowane zachowanie.
P-147891
lukasz427
Temat założony przez niniejszego użytkownika
» 2016-05-03 23:14:42
Co  to oznacza, ze program ma niezdefiniowane zachowanie? Jestem poczatkujacy,
P-147908
Kaikso
» 2016-05-03 23:46:05
Program ma niezdefiniowane zachowanie kiedy ono nie wynika wprost z jego kodu ale zależy od kompilator, architektury, środowiska i/lub inny zmiennych czynników niezależnych od języka programowania.
P-147909
j23
» 2016-05-04 09:42:17
Jeśli ten kod kompilowany jest w 32-bitach, to jest w nim błąd. Typ int (na x86) ma wielkość 4 bajtów, double - 8. Przypisanie *wsk_double = 17.79; spowoduje nadpisanie dodatkowych czterech bajtów stosu, a to może powodować trudne do wykrycia błędy.

Sprawdź, czy b ma taką samą wartość po przypisaniu nowej wartości *wsk_double.
P-147917
Monika90
» 2016-05-04 09:57:39
Gdyby rozmiary int i double (i wyrównanie) były takie same, to i tak zachowanie programu byłoby niezdefiniowane. Zabronione jest używanie obiektu typu int przez wskaźnik do double.
P-147918
mateczek
» 2016-05-04 13:17:55
A może kolega zdradzi cel swoich wysiłków ?? po co chce rzutować double na int??
Skoro to zupełnie inny sposób zapisu danych w pamięci i ogólnie sieczka z tego wyjść powinna ??
P-147924
lukasz427
Temat założony przez niniejszego użytkownika
» 2016-05-04 21:13:43
Dzieki za wskazówki.
Zapytałem, ponieważ jestem na etapie wskaźników.Ucze się z "Symfonii..." i dotarłem do wykorzystania operatora reinterpret_cast przy wskźnikach.Autor pisze,że można wskazywać wskaźnikiem jednego typu na to co pokazuje drugi wskaźnik innego typu właśnie za pomocą reinterpret_cast.

Będąc szczerym to nie wiem do czego to można wykorzystać i wymyśliłem aby lepiej to zrozumieć ten prosty program.


Mój wniosek jest taki:




Wygląda na to, że można pokazać wskaźnikiem jednego typu na to co pokazuje wskaźnik drugiego typu ale nie można się odnieść do obiektu na który pokazuje wskaźnik.





P-147950
« 1 » 2
  Strona 1 z 2 Następna strona