2010-09-06 310 views
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個字節即
00000000 00000000 00000000 01000001和的第一字節地址存儲在PTR有趣的問題幫助

在上面的代碼我有型鑄造整型*爲char *在一個動機來打印第一個字節存儲在X(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 - 我正在開發-C++工作

+0

sizeof(char)總是1,根據定義 – 2010-09-06 12:52:33

回答

13

您的機器是little-endian,和最顯著字節先走了。

+2

...並且在提問者犯下相反的錯誤之前:little-endian隻影響將值存儲在內存中然後單獨訪問其字節時發生的情況。它並不影響'>>'和'<<'移位運算符的含義:無論端到端如何,不重要的位始終是「右」。 – 2010-09-06 12:57:04

+0

存儲在「ptr」和「a」中的地址是相同的,這意味着LSB地址存儲在它們中。 – user436212 2010-09-07 08:56:34

+0

感謝您的答案..! – user436212 2010-09-08 11:45:59