指针函数与函数指针的区别

xiaoxiao2021-02-28  69

1、指针函数:本质是一个函数。函数返回类型是某一类型的指针

    格式:  类型标识符    *函数名(参数表)

                   int *f(x,y);

 

1 2 3 4 5 float  *fun();   float  *p;   p = fun(a);

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 int * find( void );   int  * find(){         int  *pp ;        pp= 0;      return  pp;       }   int  main( int  argc,  const  char  * argv[]) {        int  *pp ;      pp = find();        return  0; }

 本质是函数 只是这个函数返回的是一个执行某一类型数据的指针;

 

2、函数指针是指向函数的指针变量,即本质是一个指针变量

     格式:类型说明符 (*函数名)(参数)

                int (*f) (int x); 

    指向函数的指针包含了函数的地址,可以通过它来调用函数

   其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数实现地址。指针的声明笔削和它指向函数的声明保持一致。

 

1 2 3 4 5 6 7 8 9 10 11 12 int   xMax( int  a, int  b){      return  a>b?a:b;       } int  main( int  argc,  const  char  * argv[]) {              int  (*xMaxValue)( int  a, int  b) = &xMax; // &可以省略            int  d = xMaxValue(xMaxValue(2,4),3);      printf( "最大的数字是: %d\n" , d); }

 

   

  指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。

   辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。

3、回调函数

函数指针作为某个函数的参数

 

函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。

简单讲:回调函数是由别人的函数执行时调用你实现的函数。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // 回调函数 void  populate_array( int  *array, size_t arraySize,  int  (*getNextValue)( void )) {      for  (size_t i=0; i<arraySize; i++)          array[i] = getNextValue(); }    // 获取随机值 int  getNextRandomValue( void ) {      return  rand(); }    int  main( void ) {      int  myarray[10];      populate_array(myarray, 10, getNextRandomValue);      for ( int  i = 0; i < 10; i++) {          printf( "%d " , myarray[i]);      }      printf( "\n" );      return  0; }
转载请注明原文地址: https://www.6miu.com/read-2627064.html

最新回复(0)