函数指针通常用来将一个函数A作为参数传递到另一个函数B当中,我们可以通过函数指针在函数B中对函数A进行使用。
举个栗子:
我们定义一个函数 int TaskAssignment(...) 用于创建一个线程,多次调用该函数即可创建多个线程。我每次希望创建的线程所要实现的功能是不同的,但回调函数所接受的参数却是相同的,即利用 phtread_create(...) 函数创建线程时传入的回调函数不同但回调函数的参数相同,但是受限于某些原因我们还不能简单的多次调用 pthread_create(...) 函数来实现这个效果,于是我们就要将回调函数作为参数传入到 TaskAssignment(...) 函数中。
这种情况下我们可以利用 typedef 定义一个函数指针类型,类似这样:
typedef void (*pfModBlock)(char *addr, int len)
在定义完函数指针类型之后,使用语句 pfModBlock pfa; 这样的语句即可声明一个指向返回值为空、参数为 char* 和 int 类型的函数的函数指针 pfa。
利用语句 pfa = WriteData(char*, int, char* ); 将 pfa指向函数 WriteData(...) 之后,就可以通过将函数指针 pfa 传递进 TaskAssignment(...) 函数的方式将函数 WriteData(...) 传递进去。
传递方式类似于这样:
TaskAssignment(pfa, pWords, length, data, ...);
在 TaskAssignment(...) 函数体中,我们可以按照类似于下面这样的方式调用 pfa 所指向的函数:
int TaskAssignment(pfModBlock a, char *b, int c, char *d, ...){
(*a)(b, c, d);
...
}
其中的 (*a)(b, c, d); 这一句的含义就相当于 WriteData(b, c, d);