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

C 从另一个不兼容类型的指针取消对别名指针的引用,c,type-punning,C,Type Punning,如果我做这个任务 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);

如果我做这个任务

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;
}
您可能没有预期的
i=16


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

未定义的行为,应用严格的别名规则。它是一个整数,因此没有小数点。还有,为什么不简单地在编译器中测试它呢?显然,你应该使用一个联合体,否则行为将是未定义的。有关详细信息,请参阅。@amanuel2在C中测试未定义的行为是毫无意义的,因为结果是未定义的。
float x = 16;