18.函数指针与回调函数

  • 1.函数指针

函数指针是指向函数的指针变量。
通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。
函数指针可以像一般函数一样,用于调用函数、传递参数。

函数指针类型的声明:

typedef int (*fun_ptr)(int,int);  //声明一个指向同样参数、返回值的函数指针类型

以下实例声明了函数指针变量 p,指向函数 max:

#include <stdio.h>

int max(int x, int y){
  return x > y ? x:y;
}

int main(){
  //p 是函数指针
  int (* p)(int, int) = &max;  //&可以省略
  int a,b,c,d;
  
  printf("请输入三个数字:");
  scanf("%d %d %d\n", &a, &b, &c);
  
  //等价于: d = max(max(a,b),c);
  d = p(p(a, b),c);

   printf("最大的数字是: %d\n", d);
 
   return 0;
}
  • 2.回调函数

函数指针作为某个函数的参数
函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。
简单讲:回调函数是由别人的函数执行时调用你实现的函数

#include <stdio.h>
#include <stdlib.h>

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 marray[10];
    /* getNextRandomValue 不能加括号,否则无法编译,因为加上括号之后相当于传入此参数时传入了 int , 而不是函数指针*/
    populate_array(marray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++){
      printf("%d\n", marray[i]);
    }
  return 0;
}

posted @ 2025-03-26 21:47  little小新  阅读(19)  评论(0)    收藏  举报