C"函数指针"typedef没有星号?

kiz*_*zx2 12 c typedef function-pointers

可能重复:
这种typedef是什么意思?功能原型?

今天我遇到了这种语法

typedef double (d2d)(double);
Run Code Online (Sandbox Code Playgroud)

cdecl告诉我它是一个返回double的函数(而不是指向返回double的函数的指针).那么让我们看看它是如何工作的:

#include <stdio.h>

typedef double (d2d)(double);
//typedef double (*d2d)(double); // the "usual" way

double twice(double x)
{
    return x * 2.0;
}

double apply(d2d f, double x)
{
    return f(x);
}


int main()
{
    printf("%f\n", apply(twice, 2.0)); // Prints 4.0000
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,GCC 4.2.1编译它没有问题.我只是想知道这和typedef函数指针的"通常"方式之间的细微差别是什么?