取消引用从另一个不兼容类型别名的指针
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
。
在大多数情况下,您的代码看起来是正确的,您不会收到警告或任何东西,而且您的代码会 运行。 所以要小心!
如果我做这个作业
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
。
在大多数情况下,您的代码看起来是正确的,您不会收到警告或任何东西,而且您的代码会 运行。 所以要小心!