美文网首页
C++之函数指针

C++之函数指针

作者: 全球顶尖伪极客 | 来源:发表于2021-12-30 15:02 被阅读0次
#include <stdio.h>

void add(int num1, int num2); // 先声明

void mins(int num1, int num2) {
    printf("num1 - num2 = %d\n", (num1 - num2));
}

// 操作 回调到  add  mins
// void(*method)(int,int)  声明好 函数指针
// void 返回值
// (*method) 函数名
// (int,int) 两个参数
void opreate(void(*method)(int,int), int num1, int num2) {
    method(num1, num2);

    printf("opreate函数的 method指针是多少:%p\n", method);
}

// 7.函数指针。(回调)  Java接口的回调
int mainT8() {  // 【第一种写法】

    opreate(add,  10, 10);
    opreate(mins,  100, 10);

    // 原理是什么?

    printf("main函数的 add指针是多少:%p\n", add);
    printf("main函数的 mins指针是多少:%p\n", mins);

    // &add和add是一样的值吗
    printf("%p, %p\n", add, &add); //  004018CE, 004018CE  一样的

    return 0;
}

// 再实现 使用
void add(int num1, int num2) {
    printf("num1 + num2 = %d\n", (num1 + num2));
}

样例二:

#include <stdio.h>

void callBackMethod(char * fileName, int current, int total) {
    printf("%s图片压缩的进度是:%d/%d\n", fileName, current, total);
}

// 压缩的方法
// 定义函数指针: 返回值(*名称)(int,double)
void compress(char * fileName, void(*callBackP)(char *,int,int)) {
    callBackP(fileName, 5, 100); // 回调给外交 压缩的进度情况
}

// 函数指针2
int main() {

    // 1 如果有问题
    // VS  Clion 通过了,  Linux 可能不通过(因为这样不合规范)
    // void (* call) (char *, int ,int) = callBackMethod;

    // 有种temp的思路一样的感觉
    //  2 再换成这种方式 【第二种写法】
    // Linux  先定义, 再赋值
    void (* call) (char *, int ,int);
    call = &callBackMethod;

    void (* call2) (char *, int ,int);
    void (* call3) (char *, int ,int);
    void (* call4) (char *, int ,int);
    void (* call5) (char *, int ,int);
    call5 = &callBackMethod; // &callBackMethod 1000H  == callBackMethod 1000H

    compress("derry.png", call5);

    // 常量指针  指针常量   【函数指针】

    // 字符串  操作符重载 + C函数
    // char * c = "Derry" + "A";
}

相关文章

网友评论

      本文标题:C++之函数指针

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