本文重点介绍两者的嵌套使用,很少介绍函数指针和指针函数。
一、函数指针
函数指针本质上是指针,指向函数地址。 例如
void(f ) ) int; 定义了指针f,f指向的函数接受整数参数并返回空值。
二、指针函数
指针函数比较简单,本质上是函数,他的返回值是指针
三、嵌套
假设定义了以下函数
voidadd1(intn ) { n=n 1; printf (添加% d (n ),n ); (void ) f(inta,int b ) ) int ) printf ) ' addaandb:%dn ',a b ); 返回添加1; }第一个函数是两个数相加的简单函数定义。
第二个定义是f是函数,接受两个整数参数,返回值是函数指针。 换种形式,可能会更明确。
void(* ) int ) f ) int,int b ) printf ) ' addaandb:%dn ',a b ); 返回添加1; }完整的代码示例:
# include stdio.h # include unistd.h # include stdlib.h # include string.hvoidadd1(intn ) ) { n=n 1; printf (添加% d (n ),n ); (void ) f(inta,int b ) (int ) printf ) ) addaandb:%dn (,a b ); 返回添加1; (}int main ) ) ) f (1,2 ) ) ) 10; }代码定义了函数f,并且返回函数指针,因此调用方式为() f (1,2 ) ) ) 10 );
执行结果:
四.实际范例
linux中信号处理函数的定义是这样的形式
void信号(int signum,void ) *Handler () int ) ) ); 或者
typedefvoid(*sighandler_t ) ) int; sighandler_tsignal(intsignum,sighandler_t handler );