指向函数的指针
在C语言中,函数名代表函数的入口地址。可以定义一个指针变量,接收函数的入口地址,让它指向函数,这就是指向函数的指针,也称函数指针。通过函数指针可以调用函数,它还可以作为函数的参数。
函数指针的定义
函数指针定义的一般格式为:
类型名 (*变量名) (参数类型表);
类型名指定函数返回值的类型,变量名是指向函数的指针变量的名称。例如:
int (*funptr) (int, int);
定义了一个函数指针funptr
,它可以指向有两个整型参数且返回值类型为int的函数。
通过函数指针调用函数
在使用函数指针之前,要先给它赋值。赋值时,将一个函数名赋给函数指针,但该函数必须已经定义或声明,且函数返回值的类型和函数指针要一致。
假设函数fun(x, y)
已经定义,它有两个整型参数且返回一个整型变量,则funptr=fun;
将函数fun()
的入口地址赋给funptr
,funptr
指向fun()
。
调用该函数除了直接使用函数名调用(例如使用fun(3,5)
),还能通过函数指针调用。通过函数指针调用函数的一般形式为:
(*函数指针名) (参数表);
例如上述举例可以写成(*funptr) (3, 5);
函数指针作为函数的参数
C语言的函数调用中,函数名或已赋值的函数指针也能作为实参,此时,形参就是函数指针,它指向实参所代表的函数的入口地址。下面给出应用:
编写函数calc(f, a, b)
,用梯形公式求函数
在[a, b]
上的数值积分。
公式: