c中的奇怪代码

时间:2017-03-31 11:10:38

标签: c printf format-specifiers

这里有一个奇怪的代码:

const double a[] = {0,1,2,3,4};
int main()
{
    double *p = a;
    printf("%f\n",p[2]); //2.000000
    printf("%f\n",p);    //2.000000
}

它返回2.000000,为什么?

1 个答案:

答案 0 :(得分:6)

代码

printf("%f\n",p);

导致undefined behavior。要打印作为函数参数传递的数组名称衰减类型的地址(指针),您需要

  • 使用%p转换说明符。
  • 将参数投射到(void *)