2
#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 バイトに格納され
ます。

上記のコードでは、最初のバイト x(type int) に格納されている値を出力する動機で、int* を char* に型キャストしました。

したがって、型キャスト後、「a」は最初のバイトアドレス、つまり ptr にも含まれます (int)*a を表示すると、値を表示するために最初のバイトのみを考慮する必要があります..?? しかし、出力は0(最初のバイト値)ではなく65です..どこが間違っているのでしょうか..?

私が学んだことは

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++ に取り組んでいます

4

1 に答える 1

14

お使いのマシンはリトルエンディアンであり、最下位バイトが最初になります。

于 2010-09-06T12:49:19.403 に答える