取消引用从另一个不兼容类型别名的指针

Dereferencing a pointer aliased from another of an incompatible type

如果我做这个作业

float x = 16.8;
unsigned int i = *(unsigned int*) &x;

变量 i 的值是多少?这个赋值的逻辑是什么?

使用这样的代码,您可能会看到答案 在您的精确案例中

#include <stdio.h>

int main(void)
{    
    float x = 1;
    unsigned int i = *(unsigned int*) &x;
    printf("%d\n", i);

    return 0;
}

通过将指向 float 的指针转换为指向 unsigned int[= 的指针,这种类型的赋值是非法的32=],然后取消引用它,您违反了 严格别名规则

正如评论中所说,没有严格的答案。 即使像 :

这样的圆角 x
float x = 16;

您可能不会有预期的 i = 16

在大多数情况下,您的代码看起来是正确的,您不会收到警告或任何东西,而且您的代码会 运行。 所以要小心!