可能重複:
Casting int pointer to char pointer causes loss of data in C?將int轉換爲char指針:意外的值?
什麼是輸出是在下面的代碼64
的原因是什麼?
void main()
{
int i=320;
char *ptr=(char *)&i;
printf("%d",*ptr);
}
可能重複:
Casting int pointer to char pointer causes loss of data in C?將int轉換爲char指針:意外的值?
什麼是輸出是在下面的代碼64
的原因是什麼?
void main()
{
int i=320;
char *ptr=(char *)&i;
printf("%d",*ptr);
}
執行定義;取決於您的平臺上的字節順序和sizeof(int)。你基本上將你的int截斷爲它自己的第一個字節,這顯然是你係統上的最低位。
320 = 0×00 00 01 40 並通過截去到char這始終是一個字節: 0x40的= 64
這就是爲什麼。
編輯:正如丹尼爾菲捨爾指出的,這也取決於CHAR_BIT
是< = 8(它現在在大多數情況下,如果不是全部的話)。
爲了完整性:它也取決於'CHAR_BIT'。如果'CHAR_BIT> = 9',在小端機器上,它應該給320.現在,我在哪裏可以找到具有'CHAR_BIT> 8'的下一個實現? –
我認爲沒有現代系統使用非八位字節「char」。 – 2012-07-04 18:56:04
我也這麼認爲。但是仍然有幾個使用36位字的舊機器,所以它不僅僅是這個標準的一個奇怪之處。 –
這是一個char
指針。所以它指向一個字節。 320不適合一個字節。
320 0x0140
64即0x0040
你只是讀取int值的低字節。
與i
相關聯的存儲器指向320或0x0140
的整數(即大於一個字節)值。
然後,您將一個指向此整數的指針並將其轉換爲指向char
(單個字節)的指針。
然後你打印這個地址的值,在這個例子中是0x40
,即LSB。這是你的64
在其他實現價值,你會得到最高位,這將是0x01
或1
它看起來像你只得到低字節的值 - (320-256 )= 64. –
你能解釋一下爲什麼你從256中減去320? – kamran619