ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

6-7 函数指针

2022-02-20 08:32:05  阅读:130  来源: 互联网

标签:fp f1 函数 int 函数指针 指针


目录

使用函数指针

  • 声明函数指针: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;
}

标签:fp,f1,函数,int,函数指针,指针
来源: https://www.cnblogs.com/timothy020/p/15914810.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有