Refrain
  • 3
  • 新人请关照

c语言指针变量类型导致的问题?

void main()
{

    double * p;
    int * k;
    int t=55;

    p = &t;
    k = &t;
    printf("%d %d\n",*p,*k);
}

为什么输出 *p=55 *k=4201104 为什么*k变成了内存地址呢? 如果先输出*k 后输出*p 结果是正常的 求解

阅读 208
评论
    3 个回答

    因为int是4字节,double是8字节,从int*地址读取8字节内存会带有4字节垃圾数据。printf接收到的参数内存是char*/55/..../55,把垃圾数据[....]解析成整型自然会得到错误的结果。如果仅传递低4字节就可以得到正确的结果了printf("%d %d\n",*(int*)p,*k);

    评论 赞赏