簡體   English   中英

為什么以下內容會打印出來?

[英]Why does the following print what it does?

typedef unsigned char byte;

unsigned int nines = 999;
byte * ptr = (byte *) &nines;


printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%d\n",ptr[0]);
printf ("%d\n",ptr[1]);
printf ("%d\n",ptr[2]);
printf ("%d\n",ptr[3]);

輸出:

3e7
3e70
231
3
0
0

我知道前兩個只是999和999 * 16的十六進制表示形式。 剩下的4是什么意思? ptr [0]到ptr [3]?

您最有可能在十六進制的32位LE系統999上運行此命令:
00 00 03 E7將其存儲在內存中的方式為
E7 03 00 00因此:-

ptr[0]指向包含E7的字節,該字節為十進制231
ptr[1]指向包含03的字節(十進制為3)
ptr[2]指向包含00的字節,十進制為0
ptr[3]指向包含00的字節,十進制為0

HTH!

我認為,如果您撰寫以下內容,將會清楚地看到:

typedef unsigned char byte;

main() {
unsigned int nines = 999;
byte * ptr = (byte *) &nines;

printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%x\n",ptr[0]);
printf ("%x\n",ptr[1]);
printf ("%x\n",ptr[2]);
printf ("%x\n",ptr[3]);
printf ("%d\n",sizeof(unsigned int));
}

char是8位,一個字節,而int是4字節(在我的64字節機器中)。 在您的計算機中,數據被保存為little-endian,因此,最不重要的字節被首先定位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM