• 【面试刷题】——函数指针和指针函数


    函数指针”(function pointer)和 “指针函数”(pointer to function)是两个不同的概念,它们涉及到指针和函数的结合使用。

    函数指针(Function Pointer):

    函数指针是指向函数的指针变量。它可以用来存储函数的地址,以便在程序运行时动态调用不同的函数。函数指针的声明方式如下:

    #include 
    
    int add(int a, int b) {
        return a + b;
    }
    
    int subtract(int a, int b) {
        return a - b;
    }
    
    int main() {
        int (*funcPtr)(int, int); // 声明一个函数指针
    
        funcPtr = add; // 指向add函数
        std::cout << funcPtr(5, 3) << std::endl; // 调用add函数
    
        funcPtr = subtract; // 指向subtract函数
        std::cout << funcPtr(5, 3) << std::endl; // 调用subtract函数
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    这个示例中,funcPtr 是一个函数指针,它可以根据需要指向不同的函数,并通过调用函数指针来调用相应的函数。

    指针函数(Pointer to Function):

    指针函数是一个返回指向函数的指针的函数。换句话说,它是一个函数,其返回类型是一个函数指针。指针函数的声明方式如下:

    #include 
    
    int add(int a, int b) {
        return a + b;
    }
    
    int subtract(int a, int b) {
        return a - b;
    }
    
    int (*getOperation(bool addition)) (int, int) {
        if (addition) {
            return add;
        } else {
            return subtract;
        }
    }
    
    int main() {
        int (*funcPtr)(int, int) = getOperation(true); // 使用指针函数获取函数指针
        std::cout << funcPtr(5, 3) << std::endl; // 调用add函数
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这个示例中,getOperation 是一个指针函数,它根据传入的参数返回不同的函数指针。

    总结来说,函数指针是指向函数的指针变量,而指针函数是返回函数指针的函数。它们都是在C++中用于实现函数回调、策略模式和动态函数调用等高级编程技术的重要工具。

  • 相关阅读:
    VMware 虚拟机安装 OpenWrt 作旁路由 单臂路由 img 镜像转 vmdk 旁路由无法上网 没网络
    Vue组件化编码流程,组件自定义事件,全局事件总线,消息订阅与发布
    leetcode 第 364 场周赛
    c++ 常用STL总结
    《谷粒商城》总结篇
    19c集群 两节点时间相差太大导致集群异常
    在 Linux 程序中使用 breakpad
    【详细介绍下图搜索算法】
    C++属性说明符序列
    XCTF刷题十一道(01)
  • 原文地址:https://blog.csdn.net/weixin_55799469/article/details/132928069