函数指针数组

前言:

最近在写差分进化算法的时候,测试函数很多,每次只能测试一个函数,那么如何实现每次换函数时尽量少改动代码呢?

想了想,决定define一个全局常量Fun,每次换函数的时候只改动这个数,再根据这个数的值去调用相应的函数。可是这样一来不是要写好多if else或者switch.数量一多就不好了。如果函数也有数组就好了,改下下标就能访问相应的数组元素……

突然想到在做操作系统实验的时候,好像看到一个叫做函数指针的东西。那么使用函数指针数组就可以将函数们当作数组来使用。

 

函数指针数组:

函数名其实就是一个指针,指向函数的入口地址。

必须声明参数表明这是一个函数指针;

必须用括号把*和函数名括起来,表明这是函数指针,而不是返回一个指针的函数。

 

既然函数名可以通过函数指针加以保存,那么也一定能定义一个数组来存这些指针,这就是函数指针数组。

正确使用函数指针数组的前提条件是,这若干个需要通过函数指针数组保存的函数必须有相同的参数和返回值。

使用的时候直接把需要调用的函数名赋给函数指针即可。

既然说函数名是一个指针的话,那么函数的调用就有2种方式:

函数名(参数列表)

*函数名)(参数列表)

使用函数指针的时候,也是可以使用这2种调用方法。

总之一句话,给函数指针赋值后就把它当作普通函数用就行啦~

 

 

#include <iostream> 
using namespace std;
#define Fun 0

void (*f[2])(int a, int b);

void f1(int a, int b)
{
    cout << a+b << endl;
}

void f2(int a, int b)
{
    cout << a*b << endl;
}

void f3(int a, int b)
{
    cout << a-b << endl;
}

int main()
{
    f[0] = f1, f[1] = f2, f[2] = f3;//赋值给函数指针 

    f[Fun](1,2);                    //函数指针数组

    (*f1)(1,2);                        //函数名是指针
    
    (*f[2])(1,2);                    //依然是指针 
}
View Code
原文地址:https://www.cnblogs.com/chenyg32/p/3293427.html