跳转到内容

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()”。传递的函数必须与预期的参数数量和类型一致,以及与返回的值一致。

华夏公益教科书