Это тривиальный пример того, что известно как Функция высшего порядка .
В этом конкретном примере это не очень полезно.Вы правы в том, что было бы проще просто передать данные напрямую.
Это метод, который позволяет обобщать функции и очень полезен для уменьшения дублирования кода при правильном использовании.
Типичным примером является функция map
, которая преобразует список:
var arr = [1, 2, 3];
var newArr = arr.map(x => x + 1); // Pass a function that adds one to each element
print(newArr); // Prints [2, 3, 4]
Без функций более высокого порядка вам придется писать один и тот же код цикла, который содержит map
каждый раз, когда вы хотите преобразоватьсписок.Что если я хочу добавить 2 к каждому элементу где-нибудь еще?Или умножить каждый на 5?Передав функцию, вы можете сказать ей, как вы хотите, чтобы она преобразовывала каждый элемент, не беспокоясь об итерации.
Как отмечено в комментариях, другим примером будет сортировка функций.Они позволяют передавать функцию, которая определяет порядок сортировки.Без этой возможности вам нужно было бы написать новую функцию сортировки для каждого отдельного порядка сортировки и типа элемента.
Извините, я не мог ответить на это в C. Я понимаю, что происходит в коде, который выопубликовал, но я не знаю C, поэтому я не мог привести хороший пример кода, который использует HOF.