意外的输出打印一个浮动转换为int

bor*_*ree 2 c pointers

#include <stdio.h>
int main()
{
    float a = 12.5;

    printf("%d\n", a);
    printf("%d\n", *(int *)&a);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另外,你如何解释表达式*(int *)&a

cni*_*tar 6

它接受float的地址,将其转换为整数指针,然后将其解引用为整数.完全错了.

这里至少有两件事是错的:

  • 没有人说int和float的指针需要大小相同
  • float的表示看起来与signed int的表示形式完全不同

因此输出到第二个printf(如果它没有发生崩溃,因为它是未定义的行为,按照第一点)可能是一些奇怪的,巨大的数字.