Использование массива указателей на функции - C (СИ)
Формулировка задачи:
Подскажите, пожалуйста, что я делаю не так. Это компилируется, но не выводит функцию func1.
void func1(void);
void func2(void);
void func3(void);
void func4(void);
int main(void) {
void (*funcArr[5])(void);
funcArr[0] = func1;
funcArr[1] = func2;
funcArr[2] = func3;
funcArr[3] = func4;
(*funcArr[0])();
return 0;
}
void func1()
{
printf("1");
}
void func2()
{
printf("2");
}
void func3()
{
printf("3");
}
void func4()
{
printf("4");
}Решение задачи: «Использование массива указателей на функции»
textual
Листинг программы
#include <stdio.h>
void func1(void) {
printf("1\n");
}
void func2(void) {
printf("2\n");
}
void func3(void) {
printf("3\n");
}
typedef void (*func_t)(void);
int main(void) {
func_t funcs[] = { func1, func2, func3, NULL };
int i;
for ( i = 0; funcs[i]; ++i )
funcs[i]();
return 0;
}
Объяснение кода листинга программы
- Подключение стандартной библиотеки.
- Объявление трех функций: func1, func2, func3.
- Объявление типа данных func_t, который является указателем на функцию.
- Инициализация массива funcs массивом из трех функций и завершающим NULL.
- Объявление переменной i для использования в цикле.
- Запуск цикла по массиву funcs, пока не встретится NULL.
- Вызов функции по адресу, содержащемуся в массиве funcs, с передачей пустого списка аргументов ().
- Возврат значения 0 из функции main, что означает успешный конец работы программы.