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;