Как я должен использовать массив указателей на функции в C?
Как я могу их инициализировать?
c
initialization
function-pointers
Парень в шляпе
источник
источник
(*p[4]) (int, int) {sum,substract,mul,div}
Приведенные выше ответы могут вам помочь, но вы также можете узнать, как использовать массив указателей на функции.
Вы можете назначать только адреса функций с одинаковым типом возврата и одинаковыми типами аргументов, но без аргументов, одному массиву указателей на функции.
Вы также можете передавать аргументы, как показано ниже, если все вышеперечисленные функции имеют одинаковое количество аргументов одного типа.
Примечание: здесь в массиве нумерация указателей на функции будет начинаться с 0, как в обычных массивах. Таким образом, в приведенном выше примере
fun1
может быть вызвано, если option = 0,fun2
может быть вызвано, если option = 1, иfun3
может быть вызвано, если option = 2.источник
(*func_ptr[3])
на(*func_ptr[3])()
и оно будет скомпилированоВот как вы можете использовать это:
New_Fun.h
New_Fun.c
main.C
Я надеюсь, что это помогает в понимании
Function Pointer.
источник
f1, f2 ...
и вместо этого введите 'writefile, readfromfile ...' ... это становится более читабельнымЭтот «ответ» является скорее дополнением к ответу VonC; просто отметив, что синтаксис можно упростить с помощью typedef, и можно использовать агрегатную инициализацию:
источник
О, есть множество примеров. Просто взгляните на что-нибудь внутри glib или gtk. Вы можете увидеть работу функциональных указателей в работе там полностью.
Вот, например, инициализация содержимого gtk_button.
И в gtkobject.h вы найдете следующие объявления:
Материал (* set_arg) - это указатель на функцию, и ему, например, может быть назначена другая реализация в некотором производном классе.
Часто вы видите что-то подобное
Таким образом, вы можете войти в таблицу по имени и вызвать «связанную» функцию.
Или, может быть, вы используете хеш-таблицу, в которую помещаете функцию и вызываете ее «по имени».
С уважением
Фридрих
источник
Можно использовать это так:
источник
Это должен быть короткий и простой пример копирования и вставки кода из приведенных выше ответов. Надеюсь, это поможет.
источник
Самое простое решение - дать адрес нужного вам конечного вектора и изменить его внутри функции.
источник
На этот вопрос уже дан ответ с очень хорошими примерами. Единственный пример, который может отсутствовать - это тот, где функции возвращают указатели. Я написал еще один пример с этим и добавил много комментариев на случай, если кто-то посчитает это полезным:
источник
Это простой пример для многомерного массива с указателями на функции ":
источник