Можно ли хранить указатели на функцию в массиве и вызывать функцию по номеру элемента в массиве?
например, есть функции 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"
Если количество и тип аргументов будет разным, то тоже есть стандартный ход - передать два аргумента: Первый - их количество, второй - указатель на массив ( массив структур ) аргументов, либо просто идентификатор типа аргумента + указатель. Логику парсинга аргументов можно придумать любую.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения