高级声明

int *f();

首先执行函数调用操作符(),它的优先级高于间接访问操作符,因此 f 是一个函数,它的返回值类型是一个指向整型的指针。

int (*f)();

第2对括号是函数调用操作符,但第1对括号只起到聚组的作用。它迫使间接访问在函数调用之前进行,使 f 成为一个函数指针,它所指向的函数返回一个整型值。

int *(*f)();

f 也是一个函数指针,只是它所指向的函数的返回值是一个整型指针,必须对其进行间接访问操作才能得到一个整型值。

int f[];

这个声明表示 f 是一个整型数组。

int *f[];

下标的优先级更高,所以 f 是一个数组,它的元素类型是指向整型的指针。

int (*f[])();

括号内的表达式 f[] 首先进行求值,所以 f 是一个元素为某种类型的指针的数组。表达式末尾的 () 是函数调用操作符,所以 f 肯定是一个数组*,数组元素的类型是函数指针,它所指向的函数的返回值是一个整型值。

int *(*f[])();