operator reinterpret_cast
Ostatnio zmodyfikowano 2016-07-15 05:03
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; 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? |
|
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] |
|
« 1 » |