c中的奇怪代码

use*_*855 -2 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
}
Run Code Online (Sandbox Code Playgroud)

它返回2.000000,为什么?

Sou*_*osh 6

代码

printf("%f\n",p);
Run Code Online (Sandbox Code Playgroud)

导致未定义的行为.要打印一个地址(指针),这是一个数组名称在作为函数参数传递时衰减的类型,您需要

  • 使用%p转换说明符.
  • 把论点投了(void *).