为什么类型转换在指针的情况下不起作用?

时间:2014-01-17 17:09:39

标签: c pointers output

int i=5;

float*j;

j=(float*)&i;//type casting

printf("%f",*j);

以上代码正在打印0.00000

为什么它不打印5.00000,因为我的类型由(float*)&i投放;

3 个答案:

答案 0 :(得分:1)

这里的演员简单地说

  

将此指针指向int并伪装成s pointing to a float`

这决不会影响值的基础存储(在本例中为i)。它具有在转换存储指针之前所做的确切字节集。因此,该语言现在正在解释一个浮点数,它恰好具有int的字节布局,其值为5。浮点数具有非常特定的内存布局,如此处所述

  

http://steve.hollasch.net/cgindex/coding/ieeefloat.html

在这种特殊情况下,该值被解释为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;
}