Witam
Mam mały problem z rzutowaniem, a mianowicie przy takim rzutowaniu:
int main()
{
const int stala = 0;
int zmienna = 5;
const int * wsk_st = & stala;
int * wsk_zm = & zmienna;
cout << & stala << "\t" << stala << endl;
cout << & zmienna << "\t" << zmienna << endl << endl;
wsk_zm = const_cast<int *>(wsk_st);
* wsk_zm = 8;
cout << & stala << "\t" << stala << endl;
cout << & zmienna << "\t" << zmienna << endl << endl;
cout << wsk_zm << "\t" << * wsk_zm << endl << endl;
system("pause");
return 0;
}
wychodzą mi takie wyniki:
0019FB4C 0
0019FB40 5
0019FB4C 0
0019FB40 5
0019FB4C 8
Aby kontynuować, naciśnij dowolny klawisz . . .
Wytłumaczcie mi proszę, jakim to cudem wskaźnik "wsk_zm" przechowuje adres stałej "stala" a jednocześnie po wyłuskaniu pokazuje inną wartość niż ta stała !?
Wartość stałej "stala" nie uległa zmianie mimo tego, iż powinna.
Ciekawe (i to bardzo) jest też to, że po zamianie typów na double, działa prawidłowo, czyli;
int main()
{
const double stala = 0;
double zmienna = 5;
const double * wsk_st = & stala;
double * wsk_zm = & zmienna;
cout << & stala << "\t" << stala << endl;
cout << & zmienna << "\t" << zmienna << endl << endl;
wsk_zm = const_cast<double *>(wsk_st);
* wsk_zm = 8;
cout << & stala << "\t" << stala << endl;
cout << & zmienna << "\t" << zmienna << endl << endl;
cout << wsk_zm << "\t" << * wsk_zm << endl << endl;
system("pause");
return 0;
}
Daje wyniki:
0034FEE0 0
0034FED0 5
0034FEE0 8
0034FED0 5
0034FEE0 8
Aby kontynuować, naciśnij dowolny klawisz . . .
Czyli jak najbardziej prawidłowe.
Wszystkim z góry dzięki za udzieloną pomoc.