C 为什么浮点型指针寻址int显示未知数字?

C 为什么浮点型指针寻址int显示未知数字?,c,pointers,C,Pointers,为什么这段代码在Dev-C++中显示a=1120403456的值(可能是垃圾) #include<stdio.h> int main() { int a=5; float * pf; pf=(float *)&a; *pf=100.0; printf("%d",a); return 0; } #包括 int main() { INTA=5; 浮动*pf; pf=(浮动*)&a; *pf=100.0; printf(“%d”,a

为什么这段代码在Dev-C++中显示a=1120403456的值(可能是垃圾)

#include<stdio.h>
int main()
{
    int a=5;
    float * pf;
    pf=(float *)&a;
    *pf=100.0;
    printf("%d",a);
    return 0;
}
#包括
int main()
{
INTA=5;
浮动*pf;
pf=(浮动*)&a;
*pf=100.0;
printf(“%d”,a);
返回0;
}

当您取消引用时,程序会调用未定义的行为,因为它违反了规则。您得到的值是由UB产生的。

在内存中,浮点数100.0表示为0x42C80000,十进制为1120403456。您正在打印100.0的32位整数表示形式。

为什么要用这一行
pf=(float*)&a是的,你为什么一开始就编写这个程序?仅仅因为C提供了指针的功能并不意味着你必须纯粹为了它而使用它们并编写这样的代码。你为什么认为它显示了这种价值?请详细解释,为什么投否决票?当然,另一个似乎更准确,直到你意识到标准并不要求编译器在这种情况下做大多数人期望的事情(字节重新解释),所以这个答案最好是警告UB。好吧,他们两人都投了反对票,所以让我们假设有一个更好的,百科全书式的答案在路上。。。哈。@underline.\u我希望down投票者发表评论,并指出是否有问题,但……)也许他们太挑剔了。由于陷阱值的原因,仅仅将不兼容的类型分配给另一个类型已经是未定义的行为。在这种情况下:
pf=(float*)&a@下划线\u d两个答案都可以。它们解决了这个问题的不同问题。我只是想解释为什么要显示特定的值,并将其与垃圾值区分开来。关于未定义行为的观点肯定是相关的,希望能引导OP朝着正确的方向发展。我刚才说的是你自己的答案。即使你愿意,你也不能投反对票PGotcha,我以为你在讨论原始问题。谢谢,当我将浮点变量地址存储在整型指针中,并通过该指针改变值,显示x=0.00的值时。。浮点数x=10;int*p=(int*)&x*p=100;printf(“%f”,x)@vinaynegi那么,这有什么好处?这甚至不是C有用的底层“特性”之一,因为平台之间不能保证浮点表示。这些黑客没有任何用处,除非你碰巧是一个嵌入式程序员,有一个非常紧迫的截止日期和定制的编译器。在这个阶段你可以学到的所有东西中,通过指针双关的无人区可能是最适得其反的。
*pf=100.0;