如果我做这个作业
float x = 16.8;
unsigned int i = *(unsigned int*) &x;
变量i
的价值是多少?这项任务的逻辑是什么?
答案 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
。
在大多数情况下,您的代码看起来是正确的,您不会收到警告或任何事情,您的代码将会运行。 所以要小心!