我用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字节。 –