这个基于指针的代码的答案是什么,为什么?

时间:2019-04-19 05:51:57

标签: c

这是代码。有人可以解释它的输出。

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int i;
    double a=5.2;
    char*ptr;
    ptr=(char*)&a;
    for(int i=0;i<=7;i++)
    printf("%d",*ptr++);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

double 5.2的内存布局为01000000 00010100 11001100 11001100 11001100 11001100 11001100 11001101。您可以检查它here

因为您的标准PC是低端字节序,所以最后一个字节在前。

因此,第一个字节11001101将被提升为int并被打印。是-51
第二个字节11001100将打印为-52
第三-52
... -52
-52
-52
20
64

因此,输出之间没有空格-51-52-52-52-52-522064

https://ideone.com/AQM5iW

这仅适用于小端字节序的机器,签名为char,并且IEEE-754加倍。对于大型字节序机器,输出为6420-52-52-52-52-52-51。如果您的char未签名,则-51将是205,而-52将是204