C语言函数指针、回调函数

函数指针

代码参考菜鸟教程

#include<stdio.h>
int max(int x,int y){
   return x>y?x:y;
}
int main(void){
    //p是函数指针
    int(*p)(int , int)=&max;//&可以省略
    //int(*q)(int , int)=max;//&可以省略

    int a,b,c,d;
    printf("请输入三个数字");
    scanf("%d %d %d",&a,&b,&c);
    d=p(p(a,b),c);
    printf("最大的数字是:%d",d);
   return 0;
}

运行结果如下

总结:函数指针就是利用指针指向函数,即指向函数的指针变量。在学习C语言的时候大家都很清楚指针是什么了,我们平常使用指针的时候主要让指针指向某个变量(int类型、double类型等等),指针的本质就是指向变量的地址,那么可以延伸一下,指针也可以指向函数,在这种情况下,指针的类型就是函数的返回值类型。
需要掌握的是函数指针的声明方式:

int(*p)(int,int)=&max;
int(*q)(int,int)=max;

上面两种声明方式都正确,p和q就是函数指针变量,(int,int)是函数指针所指向的函数的参数表,等于号后面是函数名(可加&也可不加)。

回调函数

回调函数就是一个被作为参数传递的函数。上面刚刚说了函数指针,那么函数指针变量就可以作为参数传递给另一个函数,这种情况下函数指针指向的函数就是回调函数。
也可以这样来理解,你给小姐姐留下了微信,你想让她加你,这个时候你留的微信就是一个函数指针,指向的是你自己,当小姐姐那边对你有好感了,她就会通过你的微信号加你,这个过程中相当于小姐姐使用了你留下的函数指针变量(参数),所以你就被回调了,回调的结果就是你俩开始唠嗑。
下方贴一下菜鸟教程提供的代码,个人感觉代码中注释有问题,就索性改了下。

#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 myarray[10];
    populate_array(myarray,10,&getNextRandomValue);
    for(int i=0;i<10;i++){
        printf("%d ",myarray[i]);
    }
    return 0;
 }
原文地址:https://www.cnblogs.com/mirage-mc/p/14293186.html