我有一个函数返回unsigned long
实际上是float
。为什么投这个指针也改变了指向的值
我们将调用该函数unsigned long foo()
当我打电话给printf像这样:
printf("%f", foo());
它总是会打印出0.00000
但是当我投它是这样的:
unsigned long bar = foo();
printf("%f", *((float *)(&bar)));
它正确输出浮点数。
用"%x"
打印我可以看到二进制表示是不同的。令人惊讶的是unsigned long
版本看起来更像是一个实际的浮点表示(41ba019a
VS 40000000
)
我双击我的系统,它的unsigned long
和float
大小是相同的检查。
所以我的问题是:
如何铸造这样的指针更改被指向什么价值?
编辑:foo的相关部分()本质上是
unsigned long foo()
{
float a = 22.4;
return *(unsigned long *)(&a) ;
}
你没有向我们展示最重要的东西。让我们看看'foo()'。 –
无符号长整型的值是从浮点开始的。该函数可以根据参数返回不同的类型。 – rtpax
那么?我们来看看相关的部分。 –