Интересная проблема по указателям .. Пожалуйста, помогите - PullRequest
2 голосов
/ 06 сентября 2010
#include<iostream>
#include<conio.h>

using namespace std;
int main()
{
           int x = 65;
           int *ptr = &x;
           char * a= (char *)ptr;
           cout<<(int)*(a);
           getch();return 0;
}           

Sixeof (ptr) и Sizeof (a) дисплей 4
Sizeof (int) отображает 4, а sizeof (char) отображает 1
Таким образом, 65 хранится в 4 байтах, т.е.
00000000 00000000 00000000 01000001 и адрес первых байтов сохраняется в ptr

В приведенном выше коде я ввел int * в char *, чтобы вывести значение, сохраненное в первом байте x (type int).

Таким образом, после типизации "a" сохраняет первый байтовый адрес, т.е. также содержится в ptr Теперь при отображении (int) * a разве он должен рассматривать только первый байт для отображения значения .. ?? но вывод равен 65 вместо 0 (первое байтовое значение) .. Куда я иду не так ...?

что я узнал, это

char * ptr1;
ptr1++;  //Ptr1 goes to the next byte..*ptr1 will display only 1 byte value

int  * ptr2;
ptr1++;  //Ptr2 goes to the next 4 byte..*ptr2 will display value conmtain in 4 bytes

PS - я работаю над Dev-C ++

1 Ответ

13 голосов
/ 06 сентября 2010

Ваш компьютер имеет значение little-endian , и младшие байты идут первыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...