首页 > 解决方案 > C中具有内置参数的函数数组

问题描述

假设我有这两个函数和这两个函数的数组的定义:

int flag;

int add(int a, int b){
    return a+b;
}

int multiply(int a, int b){
    return a*b;
}

typedef int(*f)(int, int);
f func_array[2] = {&add, &multiply};

现在,在我的代码中有一个特定的地方,我想根据我的标志状态调用这两个函数,每次都使用相同的参数

例如:

int var;
if(flag == 0)
{
    var = func_array[flag](1,1); 
}
else{
    var = func_array[flag](2,2); 
}

有没有办法在数组本身内部定义它?Somwhow 像这样定义数组并调用函数:

f func_array[2] = {&add(1,1), &multiply(2,2)};
int var = func_array[flag]();

这是一种有效的方式吗?有没有更优雅的方法来做到这一点?

标签: c

解决方案


您可以为每个参数定义一组数组:

#define ARR_SIZE 2
typedef int(*f)(int, int);

f func_array[ARR_SIZE]     = {&add, &multiply};
int param1_array[ARR_SIZE] = { 1, 2};
int param2_array[ARR_SIZE] = { 1, 2};

电话会变成

if(flag < ARR_SIZE)
{
    int var = func_array[flag](param1_array[flag], param2_array[flag]);
}

我刚刚添加了对数组大小的检查。


用宏

#define flag_call(flag) \
   func_array[flag](param1_array[flag], param2_array[flag])

你可以更简化它

if(flag < ARR_SIZE)
{
    flag_call(flag);
}

推荐阅读