易百教程

函数指针

如要声明指向函数的指针,请考虑以下代码:

int (*pfunction) (int);

它声明了一个变量,是一个指向函数的指针。指针的名称是pfunction,它只能指向具有int类型的一个参数并返回int类型的值的函数。

考虑以下函数:

int sum(int a, int b); // 计算 a+b 的结果

可以将其地址存储在声明的函数指针中:

int (*pfun)(int, int) = sum;

现在可以通过函数指针调用sum(),如下所示:

int (*pfun)(int, int) = sum;
int result = pfun(45, 55);

下面的代码定义了三个具有相同参数和返回类型的函数,并使用指向函数的指针依次调用它们中的每一个。

示例代码

#include <stdio.h>

// 声明函数
int sum(int, int);
int product(int, int);
int difference(int, int);

int main(void)
{
    int a = 10;                         // 初始化 a 的值
    int b = 5;                          // 初始化 b 的值
    int result = 0;                     // 存储结果
    int(*pfun)(int, int);              // 函数指针声明

    pfun = sum;                         // 指向 sum() 函数
    result = pfun(a, b);                // 通过指针调用 sum() 函数
    printf("pfun = sum, result = %2d\n", result);

    pfun = product;                     // 指向 product() 函数
    result = pfun(a, b);                // 通过指针调用 product() 函数
    printf("pfun = product result = %2d\n", result);
    pfun = difference;                  // 指向 difference() 函数
    result = pfun(a, b);                // 通过指针调用 difference() 函数
    printf("pfun = difference result = %2d\n", result);

    system("pause");
    return 0;
}

// 函数实现
int sum(int x, int y)
{
    return x + y;
}
// 函数实现
int product(int x, int y)
{
    return x * y;
}
// 函数实现
int difference(int x, int y)
{
    return x - y;
}

执行上面示例代码,得到以下结果:

pfun = sum, result = 15
pfun = product result = 50
pfun = difference result =  5