int i=5;
float*j;
j=(float*)&i;//type casting
printf("%f",*j);
以上代码正在打印0.00000
。
为什么它不打印5.00000
,因为我的类型由(float*)&i
投放;
答案 0 :(得分:1)
这里的演员简单地说
将此指针指向
int
并伪装成s pointing to a
float`
这决不会影响值的基础存储(在本例中为i
)。它具有在转换存储指针之前所做的确切字节集。因此,该语言现在正在解释一个浮点数,它恰好具有int
的字节布局,其值为5
。浮点数具有非常特定的内存布局,如此处所述
在这种特殊情况下,该值被解释为0
浮点值
答案 1 :(得分:0)
指针必须指向某些内容:&i
是内存中整数的地址。你的演员说“假装这个指向一个整数的指针实际上是指向浮点数的指针,然后将指针指向j。你可以假装那个,但它仍然是i的地址,这是一个整数。
答案 2 :(得分:0)
int main()
{
int s[4][2]={
{10,20},
{30,40},
{50,60},
{70,80},
};
int (*p)[2],i,j,*pint;
for(i=0;i<4;i++)
{
p=&s[i];
pint=(int*)p;//conversion working fine
for(j=0;j<2;j++)
{
printf("%d ",*(pint+j));
}
printf("\n");
}
getch();
return 0;
}