📜  门| GATE MOCK 2017 |第44章

📅  最后修改于: 2021-06-28 20:13:49             🧑  作者: Mango

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