-
函数指针
函数指针本质上是个指针,他指向的是一个函数地址,例如
void (*f)(int);
定义了指针f,f指向的函数接收整型参数,返回为空。
-
指针函数
指针函数比较简单,本质上是个函数,他的返回值是个指针
-
嵌套
假设定义了如下函数
void add1(int n) { n = n + 1; printf("added %d\n", n); } void (*f(int a, int b))(int) { printf("add a and b: %d\n", a + b); return &add1; }
第一个函数是两数相加的简单函数定义。
第二个定义,f是一个函数,它接收两个整型参数,然后返回是一个函数指针,如果换一个形式可能会更清晰一点:
void (*)(int) f(int a, int b) { printf("add a and b: %d\n", a + b); return &add1; }
完整代码示例:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> void add1(int n) { n = n + 1; printf("added %d\n", n); } void (*f(int a, int b))(int) { printf("add a and b: %d\n", a + b); return &add1; } int main() { (*f(1,2))(10); }
代码中定义了函数f,返回函数指针,因此调用方式为:(*f(1,2))(10);
执行结果:
- 实际示例
linux中信号处理函数的定义就是这种形式
void (*signal(int signum, void (*handler)(int)))(int);
或者
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);