void (*(*f[])())()
很多人不知道怎么理解这种复杂的东西,我说下我理解的方法罢。
我遵循的理解方法是“怎么用就怎么声明”。拿上面的作为例子。
先查优先级表,加几个括号:
void (*((*(f[]))()))()
它的意义就是:
(*((*(f[]))()))
是一个没有参数,返回值是void的函数。
所以
((*(f[]))())
的意义就是:指向一个没有参数,返回值是void的函数的函数指针。
所以
(*(f[]))
的意义就是:一个没有参数,返回值是一个指向一个没有参数,返回值是void的函数的函数指针的函数。
所以
f[]
的意义就是:一个指向一个没有参数,返回值是一个指向一个没有参数,返回值是void的函数的函数指针的函数的函数指针。
所以
f
的意义就是:一个数组,元素是指向一个没有参数,返回值是一个指向一个没有参数,返回值是void的函数的函数指针的函数的函数指针。
很简单吧?
这样写更好:
一个数组,元素是
指向
一个没有参数,返回值是
一个指向
一个没有参数,返回值是void的函数
的函数指针
的函数
的函数指针
当然,用typedef写更好:
/*
一个指向
一个没有参数,返回值是void的函数
的函数指针
*/
typedef void (*f1)(void);
/*
指向
一个没有参数,返回值是
f1
的函数
的函数指针
*/
typedef f1 (*f2)(void);
/*
一个数组,元素是
f2
*/
typedef f2 a[];