函数前面的int,代表的是函数的返回值的类型
使用其他名字来替换复杂的名字
通过上面的强制转换引出了问题:类型名字复杂容易出错
方法一:typedef int(*PfAdd)(int, int);
【这样就用PfAdd
替换了int(*)(int, int)
】
方法二:using pFadd = int(*)(int, int);
【这样就用pFadd
替换了int(*)(int, int)
】
这样上面图片强制转换的代码可以改成:int (*Padd)(int, int) = (PfAdd)Add;
#include <iostream>
#include <bitset>
typedef int(*PfAdd)(int, int);//声明一个函数指针类型
using pFadd = int(*)(int, int);//声明一个函数指针类型
float Add(int a, int b)
{
return (a + b)/2;
}
int main()
{
int (*Padd)(int, int) = (PfAdd)Add;//声明函数指针
PfAdd ad = (PfAdd) Add;
std::cout << Padd(1, 2) << std::endl;
std::cout << Padd << std::endl;//函数指针的地址
std::cout << ad(2, 3);
}
举例:结构体
注意理解下面代码
using Prole = int(*) (int hp, int mp);
struct Role
{
int hp;
int mp;
};
//padd函数参数只有一个,【Role rl】;但是我使用函数指针去处理时,可以传入两个参数
int padd(Role rl)
{
return rl.hp + rl.mp;
}
int main()
{
Role rl{ 100,200 };
Prole ad = (Prole)padd;//在这里我用新的类型去进行转换【Prole】
std::cout << ad(100, 350);
}
> 思考:既然定义了函数指针,新的类型,可以考虑将其作为形参放到函数内