函数指针
在学习UNIX环境高级编程,信号中有一个函数signal()定义中涉及到函数指针。
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
1. 函数指针 指向某种特定类型的函数,函数的参数和返回值类型相同;
int (*funcptr)(int, int); // 声明一个指向int (int, int)类型函数的指针
int add(int a, int b); // 函数的定义
funcptr = add; // 通过复制使得函数指针指向具体的add函数;
2. 使用 typedef 定义函数指针类型
typedef int (*Funcptr)(int, int);
Funcptr funcptr; // 定义指向int (int, int)函数类型的具体指针 ptr
3. 函数指针的使用
funcptr = add; // ptr 指向 add()函数
funcptr(100, 100); // 使用方法1. 和指向的函数用法一样
(*funcptr)(100, 100); // 使用方法2. 括号不可以少
4. 函数指针作为形参和返回值(重点)
void func(int value, int funcptr(int,int)); // 1. 第二个参数为函数类型,会自动转换为指向此类函数的指针
void func(int value, int (*funcptr)(int, int)); // 2. 显性地将形参定义为指向函数类型的指针
void func(int value, Funcptr); // 3. 使用typedef
函数调用
funcptr = add;
func(1, add); // 1. add会自动转换为函数指针
func(1, funcptr);
函数指针作为返回值
Funcptr func(int value, Funcptr);
int (*funcptr)(int, int) func(int value, int (*funcptr)(int, int));
所以
typedef void (*sighandler_t)(int); // typedef 函数指针类型是:返回值void, 形参int
sighandler_t signal(int signum, sighandler_t handler);