C 语言入门/指向 C 函数的指针
外观
< C 语言入门
本文件解释了如何在 C 语言中声明指向变量、数组和结构体的指针。也可以定义指向函数的指针。此功能允许将函数作为参数传递给其他函数。例如,这对于构建一个函数来确定一系列数学函数的解很有用。
声明指向函数的指针的语法很模糊,因此让我们从一个过于简化的例子开始:声明指向标准库函数“printf()”的指针。
/* ptrprt.c */
#include <stdio.h>
void main()
{
int (*func_ptr) (); /* Declare the pointer. */
func_ptr = printf; /* Assign it a function. */
(*func_ptr) ( "Printf is here!\n" ); /* Execute the function. */
}
函数指针必须声明为与它所代表的函数相同类型(在本例中为“int”)。
接下来,我们将函数指针传递给另一个函数。此函数将假定传递给它的函数是接受 double 类型并返回 double 类型值的数学函数。
/* ptrroot.c */
#include <stdio.h>
#include <math.h>
void testfunc ( char *name, double (*func_ptr) () );
void main()
{
testfunc( "square root", sqrt );
}
void testfunc ( char *name, double (*func_ptr) () )
{
double x, xinc;
int c;
printf( "Testing function %s:\n\n", name );
for( c=0; c < 20; ++c )
{
printf( "%d: %f\n", c,(*func_ptr)( (double)c ));
}
}
很明显,并非所有函数都可以传递给“testfunc()”。传递的函数必须与预期的参数数量和类型一致,以及与返回的值一致。