📅  最后修改于: 2023-12-03 15:29:54.261000             🧑  作者: Mango
在C++中,函数指针是指向函数的指针,它们可以用来处理函数作为参数、返回函数以及动态调用函数等一些高级用途。C++的函数指针与普通指针类似,都是指针变量,只不过它们指向的是函数地址,而不是变量的地址。本文将介绍C++中的函数指针以及使用场景。
函数指针的定义形式如下:
返回类型 (*指针变量名)(参数列表);
其中,指针变量名表示函数指针的名字,返回类型表示函数的返回类型,参数列表表示函数的参数类型和数量。以下是一些示例:
// 声明一个返回int类型,参数为int和float类型的函数指针
int (*p1)(int, float);
// 声明一个返回void指针类型,参数为int类型的函数指针
void *(*p2)(int);
// 声明一个返回double类型,无参数的函数指针
double (*p3)();
函数指针可以通过函数名或地址进行赋值。以下是一些示例:
// 声明一个返回int类型,参数为int和float类型的函数
int func(int a, float b)
{
return a + b;
}
// 声明一个返回int类型,参数为int和float类型的函数指针
int (*p)(int, float);
// 函数指针p指向函数func的地址
p = func;
// 直接使用函数名也可以将函数名转换成函数指针,以下代码与上面的一样
p = &func;
函数指针可以通过和()运算符进行调用。首先通过运算符解引用函数指针,然后再使用()运算符来调用函数。以下是一些示例:
// 声明一个返回int类型,参数为int和float类型的函数
int func(int a, float b)
{
return a + b;
}
// 声明一个返回int类型,参数为int和float类型的函数指针
int (*p)(int, float);
// 函数指针p指向函数func的地址
p = func;
// 调用函数指针p指向的函数func
int result = (*p)(10, 3.14f);
函数指针可以作为函数的参数,从而实现高级的函数调用。以下是一些示例:
// 声明一个返回int类型,参数为int和float类型的函数
int func(int a, float b)
{
return a + b;
}
// 声明一个返回void类型,参数为int和float类型和一个函数指针类型的函数
void printResult(int a, float b, int (*p)(int, float))
{
int result = (*p)(a, b);
cout << "Result: " << result << endl;
}
// 输出Result: 13
printResult(10, 3.14f, func);
函数指针可以作为函数的返回值,从而实现高级的函数调用。以下是一些示例:
// 声明一个返回int类型,参数为int和float类型的函数
int func(int a, float b)
{
return a + b;
}
// 声明一个返回int类型,参数为int和float类型的函数指针类型的函数
int (*getFunc())(int, float)
{
return func;
}
// 获取指向函数func的函数指针并调用
int (*p)(int, float) = getFunc();
int result = (*p)(10, 3.14f);
函数指针可以用在动态调用函数的场景中,通过维护一个函数指针指向不同的函数实现不同的函数调用行为。以下是一些示例:
#include <iostream>
using namespace std;
// 声明一个返回void类型,参数为int和int类型的函数
void add(int a, int b)
{
cout << a << " + " << b << " = " << a + b << endl;
}
// 声明一个返回void类型,参数为int和int类型的函数
void sub(int a, int b)
{
cout << a << " - " << b << " = " << a - b << endl;
}
int main()
{
// 声明一个返回void类型,参数为int和int类型的函数指针类型的函数
void (*p)(int, int);
// 根据用户输入动态设置函数指针指向的函数
int choice;
cout << "Enter 1 for add, 2 for sub: ";
cin >> choice;
if (choice == 1)
{
p = add;
}
else
{
p = sub;
}
// 动态调用函数
(*p)(10, 5);
return 0;
}
本文介绍了C++中的函数指针定义、赋值、调用、作为参数和返回值以及动态调用函数。函数指针是C++高级用法之一,熟练掌握函数指针用法可以提高代码的可读性和可维护性。