美文网首页
c基础 - 函数指针的使用场景

c基础 - 函数指针的使用场景

作者: 世道无情 | 来源:发表于2019-03-02 05:58 被阅读0次

    前言

    变量:就是给内存地址取一个别名;

    1. 函数指针回顾

    函数指针定义格式:
    方法返回值(* 方法名称)(参数1,参数2)
    比如:void(prinf_m)(char),方法名称随便定义,多个参数用逗号隔开

    2. 函数指针使用场景

    1>:监听数据压缩回调 - 打印进度
    // 监听数据压缩回调
    void call_back(int current , int total){
        printf("压缩的进度是:%d/%d" , current , total);  // 12/24
    }
    
    
    // 压缩的方法,这个compress就相当于是另一个文件,我们需要在另一个文件中回调
    // 参数1:压缩的文件名;参数2:回调方法,就是上边的call_back
    void compress(char* file_name  ,void(call_back)(int , int)){
        call_back(12 , 24);
    }
    
    void main(){
    
        compress("1.png" , call_back);
        getchar();
    }
    
    
    2>:监听数据压缩回调 - 打印log

    把 函数指针 作为参数传递

    // 方法指针使用场景(视频压缩回调)
    void print(char* message){
        printf("打印内容:%s" , message);
    
    }
    
    // 把函数指针作为参数传递
    void method(void(*prinf_m)(char*)){
        prinf_m("指针函数回调");  // 打印内容:指针函数回调
    }
    
    void main(){
    
        // print, &print:这两个打印结果一样,打印的都是 print方法的地址,所以下边直接用 print来接收方法指针
        // printf("%p , %p", print, &print);  // 00C411FE , 00C411FE
    
        // 用一个指针接收 printf方法
        // 下边就是一个方法指针:方法返回值(*方法名称)(参数):方法名称随便定义,多个参数的话用 , 逗号隔开
        void(*prinf_m)(char*) = print;
        // void(*prinf_m)(char*) = &print;  这样也可以
    
        // 直接传递print就可以,因为传递的参数就需要指针
        method(print);
        getchar();
    }
    

    这里需要注意:
    通过 输出语句: printf("%p , %p", print, &print); // 00C411FE , 00C411FE 可知:print和 &print都是 print方法的地址,所以直接可以用 print来接收方法指针
    void(prinf_m)(char) = print;
    void(prinf_m)(char) = &print; 这样也可以

    3. 分析上边代码执行流程

    图片.png

    代码已上传至github:
    https://github.com/shuai999/NDK-day07.git

    相关文章

      网友评论

          本文标题:c基础 - 函数指针的使用场景

          本文链接:https://www.haomeiwen.com/subject/desuwftx.html