1

是否可以定义一个函数指针数组(并且函数没有相同的输入参数),如以下代码所示?

如果是,我必须在函数定义中添加什么int (*handler)(/*what Ihave to put here ?*/);

struct handler_index {
    const char *name;
    int (*handler)(/*what Ihave to put here ?*/);
};

int handler0 (int a, int b)
{
    printf("%d\n",a+b);
}

int handler1 (int a, int b, int c)
{
    printf("%d\n",a+b+c);
}

int handler2 (int a, int b, int c, int d)
{
    printf("%d\n",a+b+c+d);
}

const struct handler_index handler_index[] = {
  [0] = {"handler0", handler0},
  [1] = {"handler1", handler1},
  [2] = {"handler2", handler3},
};
4

3 回答 3

5

什么都不放:

int (*handler)();

这意味着该函数具有未指定(但非可变)数量和类型的参数。

任何返回int和 且具有固定可变参数数量的函数都可以分配给handler

于 2012-12-26T17:29:04.057 回答
3

虽然int (*handler)() 确实允许该函数使用可变数量的参数,但我看不到任何好处。当你有一段代码需要一些东西时,函数指针很有用,找到“正确的事情”(例如,将“名称”与其他地方的一些输入进行比较),并调用函数指针来做它必须做的任何事情。函数指针调用代码需要知道函数有多少个参数(否则它将如何传递正确的参数数量和顺序。

我实际上根本没有看到任何有意义的用途。是的,您可以将可变数量的参数传递给函数,但代码必须知道函数接受哪些参数。

除非在结构的定义中以某种方式指定了参数 - 但是您需要为结构定义不同的内容以允许这样做。

我建议您需要考虑您要实现的目标,然后想出解决问题的方法,很可能使用不同的方法。

于 2012-12-26T18:47:15.413 回答
0

什么都不放。只是空括号。

int (*handler)();
于 2012-12-26T17:29:40.560 回答