📜  门|门模拟 2017 |第 44 题

📅  最后修改于: 2021-09-26 04:46:52             🧑  作者: Mango

考虑以下 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
这个问题的测验