6-7 函数指针

使用函数指针

  • 声明函数指针:int (*fp)(int, int);

    fp是一个指针,指向一个函数

    函数的形参是两个int,返回类型是int

  • 函数名作为值使用时,会自动转换为指针类型,取值符是可选的

    int f(int, int);
    fp = f;
    fp = &f;
    
  • 调用函数指针时,解引用符号是可选的

    调用fp指向的函数

    int m,n;
    fp(m,n);
    (*fp)(m,n);
    

函数指针作形参

函数不能作为形参,但是函数指针可以,以函数作为形参输入时,会转换为函数指针

//第三个参数是函数,默认转换为函数指针
void Func(int m, int n, int fp(int, int));
//显示声明参数为函数指针
void Func(int m, int n, int (*fp)(int, int));
//调用
Func(m,n,f);
Func(m,n,fp);

简化函数指针的书写

  • 别名
    • typedef
    • using
  • 自动类型
    • decltype
    • auto
typedef int(*)(int,int) FP;
typedef decltype (FP) fp2;
using fp3 = decltype(FP);

函数指针作返回值

f1是这样一个函数,参数是int,返回函数指针,该指针指向一个参数为int*,int,返回值为int的函数

直接声明int (*f1(int))(int, int);

从里到外读此声明,f1后有形参列表,说明f1是一个函数,返回值有*,说明返回类型是一个指针,指针指向函数,函数的参数列表是(int ,int ),返回值是int

等价于

FP f1(int);
decltype(f) *f1(int); //int f(int, int)

练习

编写两个函数,对两个整数进行加减运算,将指向这两个函数的指针存入vector中,并调用

#include<iostream>
#include<vector>
using namespace std;
int add(int m, int n);
int sub(int m, int n);
int main(){
    vector<int(*)(int, int)> v;
    v.push_back(add);
    v.push_back(sub);
    for(auto fp : v){
        cout<<fp(2,2)<<endl;
    }
    return 0;
}
int add(int m, int n){
    return m+n;
}
int sub(int m, int n){
    return m-n;
}
posted @   咪啪魔女  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示