考虑以下 C 代码
int main()
{
int a = 300;
char *b = (char *)&a;
*++b = 2;
printf("%d ",a);
return 0;
}
将 int 的大小视为两个字节,将 char 的大小视为一个字节。预测以下代码的输出。
假设机器是小端的。
(一) 556
(乙) 300
(C)运行时错误
(D)编译时错误答案:(一)
解释: 300的二进制等价物是00000001 00101100。由于机器是小端的,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
这个问题的测验