Как передать функцию в функцию c
Перейти к содержимому

Как передать функцию в функцию c

  • автор:

Передать функцию в другую функцию

Попробуйте воспользоваться делегатами. Если вкратце — это как раз объект, содержащий в себе ссылку на метод. Примерно так будет выглядеть код в Вашем случае:

Aleksandr Zharinov's user avatar

Определить свой делегат

Либо, воспользоваться предопределенным делегатом Func<TResult>

Более подробно о Func<TResult> можно почитать здесь

Mirdin's user avatar

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как передать функцию в качестве параметра в C?

Я хочу создать функцию, которая выполняет функцию, переданную параметром для набора данных. Как передать функцию в качестве параметра в C?

Если вы используете функции / массивы в качестве переменных, ВСЕГДА используйте typedef . — Mooing Duck

Имя функции должно быть понтером к функции. Большинство людей, изучающих C, рано или поздно покрывают qsort, что именно это делает? — mckenzm

@MooingDuck Я не согласен с вашим предложением, и в вашем предложении нет аргументов в пользу вывода. Я лично предпочитаю никогда использование typedef для указателей функций, и я думаю, что это делает код более понятным и легким для чтения. — andrewrk

@andrewrk: Ты предпочитаешь void funcA(void(*funcB)(int)) и void (*funcA())() в typedef void funcB(); void funcA(funcB) и funcB funcA() ? Я не вижу положительных моментов. — Mooing Duck

8 ответы

Декларация

Прототип функции, которая принимает параметр функции, выглядит следующим образом:

Это означает, что параметр f будет указателем на функцию, имеющую void возвращаемый тип и который принимает один int параметр. Следующая функция ( print ) — это пример функции, которую можно передать в func в качестве параметра, потому что это правильный тип:

Вызов функции

При вызове функции с параметром функции переданное значение должно быть указателем на функцию. Используйте для этого имя функции (без скобок):

назвал бы func , передав ему функцию печати.

Тело функции

Как и любой параметр, func теперь можно использовать имя параметра в теле функции для доступа к значению параметра. Скажем так func применит переданную функцию к числам 0-4. Сначала рассмотрим, как будет выглядеть цикл при прямом вызове print:

С func в объявлении параметра говорится, что f — это имя указателя на желаемую функцию, напомним сначала, что если f это указатель, тогда *f это то, что f указывает на (т.е. функцию print в таком случае). В результате просто замените каждое вхождение print в приведенном выше цикле на *f :

Как передать функцию в функцию c

Указатель на функцию может передаваться в другую функцию в качестве параметра. Например:

В данном случае первый параметр функции operation — int (*op)(int, int) — представляет указатель на функцию, которая возвращает значение типа int и принимает два параметра типа int . Результатом функции является вызов той функции, на которую указывает указатель.

Определению указателя соответствуют две функции: add и subtract, поэтому их адрес можно передать в вызов функции operation: operation(add, a, b); .

Результат работы программы:

Другой пример — функция, которая может принимать в качестве параметра некоторое условие:

Первый параметр функции action — указатель int (*condition)(int) представляет функцию, которая принимает целое число и в зависимости от того, соответствует оно условию или нет, возвращает 1 (если соответствует) или 0. На момент определения функции action точное условие может быть неизвестно.

В текущей программе условия представлены двумя функциями. Функция isEven() возвращает 1, если число четное, и 0, если число нечетное. А функция isPositive() возвращает 1, если число положительное, и 0, если отрицательное.

При вызове функции action() в нее можно передать нужное условие: action(isEven, nums, n); . В итоге программа выведет на экран числа из массива nums, которые соответствуют переданному условию:

Передача функции в функцию

Передача функции в функцию в C++ осуществляется с помощью указателей на функцию.

Рассмотрим для начала пример.

В первую очередь нас интересует строка, где в функцию передаётся другая функция:

Здесь, в качестве параметра function выступает

Фактически, здесь используется так называемый указатель на функцию и подразумевается

Но вместо (*f) компилятор понимает и привычное f.

Аналогично, можно передавать в функции и другие функции с самыми разнообразными определениями.

В программе из примера в функцию передавались математические функции из файла math.h — sin, cos, exp, а также, функция, созданная пользователем — f1.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *