Можно ли хранить указатели на функцию в массиве и вызывать функцию по номеру элемента в массиве?
например, есть функции a1(), a2(), a3() и массив mas из трёх элементов и в зависимости от того, к какому элементу массива мы обращаемся - вызывать определенную функцию
тип и параметры функции у вас обязаны совпадать с типом указателя. нужны функции с параметром - изменяйте typedef соответствующим образом, например для 1-го параметра типа int будет так:
Код:
typedef void (*func_ptr)(int);
ни в коем случае не пихайте в массив "несовместимые" по типу и параметрам функции! по правилам Си вы получите только предупреждение, проект скомпилируется, но последствия будут печальными...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.82
Error at file ../mn.c line 22 column 33: (188) constant expression required Error at file ../mn.c line 22 column 33: (206) illegal use of void expression Error at file ../mn.c line 22 column 33: (182) illegal conversion between types ??? -> pointer to function with no arguments returning ??? Error at file ../mn.c line 22 column 33: (181) non-scalar types can't be converted to other types Error at file ../mn.c line 22 column 39: (188) constant expression required make: *** [mn.p1] Error 1
отличие одно нашёл. typedef void (*func_ptr)(unsigned char); - исправил (0) убрал - это ж указатель, а не функция. параметр же указывается дальше в коде...
п.с. я обучаемый малый, меня только подпнуть в верном направлении надо...
... // пользуемся farr[0](0); // вызываем ф-ю fu с аргументом "0"
Если количество и тип аргументов будет разным, то тоже есть стандартный ход - передать два аргумента: Первый - их количество, второй - указатель на массив ( массив структур ) аргументов, либо просто идентификатор типа аргумента + указатель. Логику парсинга аргументов можно придумать любую.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения