是什么?
函数指针:是指向函数的首地址的一个指针变量
怎么写?
定义函数指针:用(*Name)
替换函数名,剩下照抄(形参可写可不写)
比如:
//有一个函数:
int add(int a,int b)
{
return a+b;
}
//函数指针写法:
int (*p)(int a,int b);
//形参可以不写,下面这种写法也是正确的
int (*p)(int,int);
//因为为了避免野指针的问题,我平时都是这么写:
int (*p)(int,int)=NULL;
有什么用?
用于回调函数(以函数指针为参数的函数),文章开头有例程
简单来说就是输入相同的参数,实现不同的功能;
怎么调用?
- 直接用函数指针替换函数名的方式调用
//根据上一块代码有一个add函数:
p(5,10); //实现5+10的输出
- 指针的基本操作调用,即取*运算再调用
//根据上一块代码有一个add函数:
(*p)(5,10)//实现5+10的输出
函数指针例程
#include<bits/stdc++.h>
using namespace std;
int add(int a,int b)
{
return a+b;
}
int main()
{
int (*p)(int,int)=NULL; //根据“用(*Name)替换函数名,剩下照抄(形参可写可不写)”
p=add; //p指向add函数
cout<<p(10,5)<<endl; //输出结果为10+5=15
return 0;
}
通常为了方便书写,经常使用typedef来定义函数指针
#include<bits/stdc++.h>
using namespace std;
int add(int a,int b)
{
return a+b;
}
typedef int (*PA)(int,int);
int main()
{
PA p=NULL; //这样就能一眼看出p是函数指针
//等效于int (*p)(int,int)=NULL;
p=add; //p指向add函数
cout<<p(10,5)<<endl; //输出结果为10+5=15
return 0;
}