konwersja typu wskaźnika za pomocą operatora reinterpret_cast
Ostatnio zmodyfikowano 2016-05-05 09:20
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ę. #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 );                     * wsk_double = 17.79;      cout << "wsk_double = " <<( * wsk_double ) << endl;                    cout << "a = " << a << endl; }
   | 
 | 
pekfos  | 
» 2016-05-03 00:35:23 Ten program ma niezdefiniowane zachowanie.  | 
 | 
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,  | 
 | 
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.  | 
 | 
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.  | 
 | 
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.  | 
 | 
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 ??  | 
 | 
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.
 
 
 
 
 
   | 
 | 
|  « 1 »  2 |