zoukankan      html  css  js  c++  java
  • 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;
     }
    
  • 相关阅读:
    003-2021 java.sql.SQLSyntaxErrorException: Unknown column 'Kitty' in 'where clause'
    002-2021 SpringMVC文件跨服务器上传异常之 409 : 目录不存在
    001-2021 SpringMVC文件跨服务器上传异常之405 : UniformInterfaceException : PUT http://localhost:9090/uploads/xxx returned a response status of 405 Method Not Allowed
    JUnit错误 : java.lang.NoSuchMethodError: org.junit.runner.Description.createSuiteDescription
    char[]
    Sql语句执行与书写顺序
    Java深拷贝和浅拷贝区别
    C++析构函数详解
    浅谈c/c++中register关键字
    C++异常之栈解旋
  • 原文地址:https://www.cnblogs.com/mirage-mc/p/14293186.html
Copyright © 2011-2022 走看看