2012-02-05 23 views
4

我在写它有它运行其他功能的功能程序的中间:通过C中的数组调用函数?

int executePuzzle(int input) { 
    switch (input) { 
     case 1: puzzle1();break; 
     case 2: puzzle2();break; 
     default:break; 
    } 
} 

但是它可能是更有效的只是有类似:

int puzzle[2] = {puzzle1(),puzzle2()}; 

然后调用puzzle0;我想知道如何做到这一点。

+1

你试过了什么?你的问题是什么?你可以从函数返回一个'struct',其中包含例如一个数组,或者你可以返回一个堆分配数组... – 2012-02-05 16:42:32

回答

9

这听起来像其中的函数指针将是有益的

typedef void (*puzzlePointer)(); 
puzzlePointer puzzles[] = { puzzle1, puzzle2, puzzle3 }; 

void executePuzzle(int input) { 
    if (input >= 0 && input < 2) { 
    puzzles[input](); 
    } 
} 
+0

完美。谢谢! – user1150512 2012-02-05 16:44:52

+0

只要输入是0或1,这将工作。如果输入是其他东西,那么会发生不好的事情(除非你添加输入检查代码)。 – mah 2012-02-05 16:47:33

+0

@mah非常真实,大部分时间我都试图理解这个概念。我将添加错误处理。 – JaredPar 2012-02-05 16:48:56

0

switch声明的情况下,是连续就像你executePuzzle功能的地方,它实际上是可能的编译器内部使用函数指针(通过跳转表)来实现switch语句。