Указатель на функцию в качестве параметра функции - C (СИ)
Формулировка задачи:
Доброго времени суток.
Стоит задача - имеется функция, которая принимает 2 аргумента: 1 - указатель на функцию, 2 - параметр int
Если PARAM==0, то вызываем foo1, если нет, то foo2. Как это осуществить? Заранее спасибо
void testfoo(void (*)(void), int PARAM);
void foo1(void)
{
printf("First func \n");
}
void foo2(void)
{
printf("Second func \n");
}Решение задачи: «Указатель на функцию в качестве параметра функции»
textual
Листинг программы
#include <stdio.h>
void function1(void)
{
puts("First function");
}
void function2(void)
{
puts("Second function");
}
typedef void (*pfunction_t)(void);
pfunction_t pfunctions[2] = { &function1, &function2 };
void test_pfunctions(pfunction_t functions[], int function_index)
{
(*functions[function_index])();
}
int main(void)
{
test_pfunctions(pfunctions, 0);
test_pfunctions(pfunctions, 1);
return 0;
}
Объяснение кода листинга программы
- Подключаем стандартную библиотеку ввода-вывода
- Определяем две функции: function1 и function2, которые не принимают аргументов и не возвращают значение
- Создаем тип данных pfunction_t, который является указателем на функцию, принимающую void аргументов и возвращающую void
- Создаем массив pfunctions, который содержит два указателя на функции: function1 и function2
- Определяем функцию test_pfunctions, которая принимает два аргумента: массив функций и индекс функции в массиве
- Внутри функции test_pfunctions вызываем функцию, на которую указывает элемент массива functions с заданным индексом, передавая ей пустой набор аргументов
- В функции main создаем экземпляр массива pfunctions и вызываем функцию test_pfunctions с двумя аргументами: pfunctions и 0 (индекс 0 в массиве pfunctions соответствует функции function1)
- Повторяем предыдущий шаг для функции function2
- Завершаем программу с кодом 0, что означает успешное выполнение