1.函数变量
int test1(){
cout << "测试 1" << endl;
return 0;
}
int main()
{
int (*f)() = 0; // 定义一个函数变量,并将该函数变量置为null
f = test1; //给该函数变量赋值
f(); //执行该函数变量
return 0;
}
2.给函数定义类型,方便编码时简洁的使用
typedef int (*F_TYPE)();
int main()
{
F_TYPE f = nullptr; // 使用函数指针类型,定义一个函数变量,并将该函数变量置为nullptr(也可以:F_TYPE f = 0;)
f = test1; //给该函数变量赋值
f(); //执行该函数变量
return 0;
}
使用该方式可以达到上一种方式相同的效果
3.返回函数的函数
形式:
返回函数的类型(*函数名称(函数参数))(返回函数的参数类型){
返回函数的类型 (*)(返回函数的参数类型) f = xxx;
return f;
}
例1:注意标颜色的位置
int test1(){
cout << "测试 1" << endl;
return 0;
}
static int (*f1())()
{
return (test1);
}
typedef int (*F_TYPE)();
int main()
{
F_TYPE f = nullptr; // 使用函数指针类型,定义一个函数变量,并将该函数变量置为nullptr(也可以:F_TYPE f = 0;)
f = f1(); //调用函数f1,返回一个返回值为int 参数为空的函数地址,这里返回的是test1的函数,
f(); //执行该函数变量
return 0;
}
例2:改变返回函数的参数和参数类型
void test2(int arg){
cout << "测试 2" << endl;
}
static void (*f2())(int)
{
cout << "this is f2 " << endl;
return (test2);
}
typedef void (*F_TYPE2)(int);
int main()
{
F_TYPE2 f = nullptr; // 使用函数指针类型,定义一个函数变量,并将该函数变量置为nullptr(也可以:F_TYPE f = 0;)
f = f2(); //调用函数f2,返回一个返回类型为void 参数为int的函数地址,这里返回的是test2的函数,
f(2); //执行该函数变量
return 0;
}
例3:改变内层函数参数
void test2(int arg){
cout << "测试 2" << endl;
}
static void (*f3(int t))(int)
{
cout << "this is f2 " << t << endl;
return (test2);
}
typedef void (*F_TYPE2)(int);
int main()
{
F_TYPE2 f = nullptr; // 使用函数指针类型,定义一个函数变量,并将该函数变量置为nullptr(也可以:F_TYPE f = 0;)
f = f3(8); //调用函数f3,返回一个返回类型为void 参数为int的函数地址,这里返回的是test2的函数,
f(2); //执行该函数变量
return 0;
}