我用C有這樣的程序:輸出這個程序在C中的解釋?
int main(int argc, char *argv[])
{
int i=300;
char *ptr = &i;
*++ptr=2;
printf("%d",i);
return 0;
}
輸出是556的小端。
我試圖瞭解輸出。這是我的解釋。
問題是威爾的回答仍處於大端機器一樣嗎?
I = 300; => I = 100101100 //在字格式的二進制=> BB的Hb 0001 00101100其中B =字節並在存儲器中的Hb =半字節
(A)=>(假定它是小端))
0x12345678 - 1100 - 0010 (Is this correct for little endian)
0x12345679 - 0001 - 0000
0x1234567a - 0000 - 0000
0x1234567b - 0000 - 0000
0x1234567c - 下intezer的位置(PTR的位置++或PTR + 1,其中的ptr是intezer指針PTR的類型爲int =>做++ PTR它將由4字節(大小的INT)遞增)
當
(B)我們做char * ptr =&i;如果在執行++ ptr時它將跳轉到位置 - > 0x12345679(它具有0001 - 0000) (p)將會變爲類型char =>在執行++ ptr時它將增加1字節(char的大小) 現在我們正在做 ++ PTR = 2 => 0x12345679將由2 => 0x12345679將具有00 * 10 **被覆蓋 - 0000而不是000 * * - 0000
所以新記憶的內容將是這樣的:
(C)
0x12345678 - 1100 - 0010
0x12345679 - 0010 - 0000
0x1234567a - 0000 - 0000
0x1234567b - 0000 - 0000
這相當於=> B B的Hb 0010 00101100其中B =字節和Hb =半字節
是我的推理正確的嗎?是否有此任何其它短方法? RGDS, 多愁善感
[_void main_](http://users.aber.ac.uk/auj/voidmain.cgi)? – gliderkite
我相信這種行爲沒有很好的定義,因爲int的大小不能保證是4字節。 –