·函数指针 可以理解为用 一个指针 来代替多个 返回值类型相同,参数个数相同,参数类型相同(只有函数名不同的)多个函数名
如 int(*) (double,int) 的函数指针类型
int 代表函数的返回值得是int (double,int)代表函数的参数仅有2个,且类型分别为double 与int
1.函数名的意义
因为单提出函数名代表指向函数的指针,该指针指向函数的最开头
例
#include<iostream>
int add(int a,int b) { return a+b; }
int main(){ }
add函数名的类型 = int * 即 decltype(add) = int *
2.函数指针
例:
#include<iostream>
int add(int a,int b) { return a+b; }
int plus(int a,int b) { return a*b; }
int main() { }
add 函数 和 plus 函数拥有相同的上述三个 可以用一类函数指针来接受他们
即 int (*) (int,int) == decltype(add)
int (*) (int,int) == decltype(plus)
#include<iostream>
using namespace std;
int add(int a,int b)
{
return a+b;
}
int mult(int a,int b)
{
return a*b;
}
int main()
{
int (*func) (int,int); // int (*) (int,int) 为一个函数指针类型 定义func变量
//可以用func代替add,plus 等一系列函数
func = add;
cout<<func(10,10)<<endl;
func = mult;
cout<<func(10,10)<<endl;
} //编译成功 成功输出
注:返回值类型相同,参数个数相同,参数类型相同只要有一个与函数指针不相同 都不能用该函数指针
例
#include<iostream>
using namespace std;
double add1(int a,int b) //Error!
int add(double a,int b) //Error!
int add2(int a ,int b ,int c) //Error
int add3(int a) //Error
int main()
{
int (*func) (int,int);
func = add; //Error
func = add1; //Error
func =add2;//Error
func =add3; //Error
}