📜  C++中的函数指针(1)

📅  最后修改于: 2023-12-03 15:29:54.261000             🧑  作者: Mango

C++中的函数指针

在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++高级用法之一,熟练掌握函数指针用法可以提高代码的可读性和可维护性。