#include <iostream>
using namespace std;
int main()
{
char tab[]={1,2,3,4,5,6,7,8,9};
cout << "tab = " << hex << tab << endl;
cout << "*tab= " << hex << *tab << endl;
cout << "(short*)tab = " << hex << (short*)tab << endl;
cout << "*((short*)tab) = " << hex << *((short*)tab) << endl;
cout << "*((short*)tab+2) = " << hex << *((short*)tab+2) << endl;
return 0;
}
Dany jest powyższy kod w QT Creator 4.6.2, kompilowany przez MinGW_32bit standardowy z instalatora. Otrzymuję dziwne wyniki:
(char*)tab = (tutaj pojawia się kilka znaczków ASCII) Ŕţa
*tab= (tutaj pojawia się "buźka" ASCII)
(short*)tab = 0x61fe97
*((short*)tab) = 201
*((short*)tab+2) = 605
Czy mogę kogoś mądrzejszego ode mnie poprosić o kilka wyjaśnień, mianowicie:
- Skąd te dziwne "adresy" ASCII zamiast normalnego adresu jak po zrzutowaniu na short w trzecim przypadku?
- Z czego wynika zakres adresów? Jestem przyzwyczajony do adresów 64 albo 32 bitowych, a ten powyższy 0x61fe97 wygląda na 24 bitowy? Czy źle liczę?
- Dlaczego późniejsze odczytywanie wartości z adresów daje wyniki "czytane od końca"? Jak dla mnie po rzutowaniu wskaźnika char na short, wyniki w hexie powinny być 102 i 506 (i nie powinny mieć też 0x na początku?).
- Podobne problemy z odczytywaniem pamięci w QT Creator miałem już wcześniej, czy jest jakiś problem w samym programie?