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

operator reinterpret_cast

Ostatnio zmodyfikowano 2016-07-15 05:03
Autor Wiadomość
monterinio
Temat założony przez niniejszego użytkownika
operator reinterpret_cast
» 2016-07-14 22:34:16
KOD PROGRAMU:

#include <iostream>
using namespace std;
C/C++
int main() {
    int ob1 = 1,
    ob2 = 2;
    double ob3 = 10;
    int * wsk_int1 = & ob1,
    * wsk_int2 = & ob2;
    double * wsk_double = & ob3;
    cout << "wint1=" << wsk_int1 << ";wint2=" << wsk_int2 << ";wdbl=" << wsk_double << endl;
    wsk_int1 = wsk_int2;
    cout << "wint1=" << wsk_int1 << ";wint2=" << wsk_int2 << ";wdbl=" << wsk_double << endl;
    wsk_double = reinterpret_cast < double *>( wsk_int1 );
    cout << "wint1=" << wsk_int1 << ";wint2=" << wsk_int2 << ";wdbl=" << wsk_double << endl;
    cout << * wsk_int1 << "\t" << * wsk_int2 << "\t" << * wsk_double << endl;
    * wsk_double = 15;
    cout << * wsk_int1 << "\t" << * wsk_int2 << "\t" << * wsk_double << endl;
    * wsk_int1 = 200;
    cout << * wsk_int1 << "\t" << * wsk_int2 << "\t" << * wsk_double;
    return 0;
}
KONSOLA:

wint1=0x7437aad162f0;wint2=0x7437aad162f4;wdbl=0x7437aad162f8
wint1=0x7437aad162f4;wint2=0x7437aad162f4;wdbl=0x7437aad162f8
wint1=0x7437aad162f4;wint2=0x7437aad162f4;wdbl=0x7437aad162f4
2 2 9.88131e-324
0 0 15
200 200 15

PROBLEM:

Proszę o wytłumaczenie, dlaczego pomimo tego, że wskaźnik wsk_double, który pokazuje na to samo co wsk_int1 nie powoduje zmiany wartości zmiennej ob1?
P-149974
mateczek
» 2016-07-15 05:03:23
1. Bo przekombinowałeś. I wsk_double nie pokazuje na ob1 tylko na ob2
2. Bo Takich rzeczy się nie robi!!!! double zajmuje więcej bajtów niż int!!!! Wpisując coś do wskaźnika typu double, a w realu pokazującego na int uszkadzasz zmienne obok !!!!
3. Bo double i int to inny sposób umieszczenia danych w pamięci
4. kod wstawiaj w znacznikach
[cpp]
//tutaj kod
[/cpp]
P-149980
« 1 »
  Strona 1 z 1