2012-02-05 3 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», содержащей, например, массив или вы можете вернуть массив, выделенный массивом ... –

ответ

9

Это звучит, как место, где указатели на функции были бы полезны

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

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

Perfect. Благодаря! – user1150512

+0

Пока ввод равен 0 или 1, это будет работать. Если ввод - это что-то еще, тогда произойдут плохие вещи (если вы не добавите код проверки ввода). – mah

+0

@mah очень верно, в основном я пытался получить концепцию. Я добавлю обработку ошибок. – JaredPar

0

Когда случаи switch заявлений являются смежными, как в вашей executePuzzle функции, это на самом деле, вероятно, что компилятор внутренне использует указатели функций (через таблицу переходов) для реализации инструкции switch.

Смежные вопросы