考虑下面的C代码
int main()
{
int a = 300;
char *b = (char *)&a;
*++b = 2;
printf("%d ",a);
return 0;
}
将int的大小视为两个字节,将char的大小视为一个字节。预测以下代码的输出。
假设机器是低端的。
(A) 556
(B) 300
(C)运行时错误
(D)编译时间错误答案: (A)
说明:二进制等效项300为0000000100101100。由于机器为低端字节序,因此00000001 00101100作为00101100 00000001以数组的形式存储在内存中。
然后为指针b提供a的地址。这意味着将00101100 00000001的第一个字节的地址分配给b(因此b分配为00101100)。
* ++ b = 2使b的值增加1,因此b现在指向下一个内存地址00000001,并且二进制等效值2(00000010)将存储在此处。
最后,a变为00101100 00000010,十进制基本上是556。
请阅读以下链接:
http://stackoverflow.com/questions/22030657/little-endian-vs-big-endian
这个问题的测验