我们来一步步剥一下洋葱吧。先说答案:
int (*(*fp)(int, int))(int);
首先,他是个指针,所以:
*fp
然后,这个指针它指向一个函数,它的参数是 (int, int)
,且返回值也是一个指针:
*(*fp)(int, int)
然后,这个返回的指针指向一个函数,这个函数参数是 int
,返回值也是 int
:
int (*(*fp)(int, int))(int);
剥洋葱结束。
最后,我们来简单写个程序测试一下:
int ff(int n) {
return n;
}
int (*f(int x, int y))(int) {
(void)x, (void)y;
return &ff;
}
int func() {
int (*(*fp)(int, int))(int) = &f;
return fp(0, 0)(88);
}
int main() {
return func();
}
可以看到成功返回 88:

最后,人生苦短,请善用 typedef。
编辑于 2023-07-18 02:55・IP 属地北京