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

时间:2016-11-01 16:43:42

标签: c type-punning

如果我做这个作业

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

变量i的价值是多少?这项任务的逻辑是什么?

1 个答案:

答案 0 :(得分:1)

使用这样的代码,您可以在精确的情况下看到答案

#include <stdio.h>

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

    return 0;
}

这种类型的分配是非法的,方法是将指向 float 的指针转换为指向 unsigned int 的指针,然后取消引用它,你反对严格别名规则

正如评论中所说,没有严格的答案。 即使使用四舍五入的x

float x = 16;

您可能没有预期的i = 16

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