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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用