Что значит такая передача параметров в функцию?

Встретил функцию сжатия данных, в которую аргументы передаются каким-то непонятным для меня образом. Вот объявление этой функции:

   int lzw_compress (void (*dst)(int), int (*src)(void), int maxbits)

Дальше идет тело функции. Что происходит при такой передаче параметров? Мы передаем в функцию указатель на область памяти буфера назначения с типом void(отсутствие типа), который в win64 занимает 1 байт (специально проверил sizeof), а затем в скобках стоит тип int (4 байта). Тут использовали приведение типов или это что-то другое? Если это все же приведение типов, то зачем оно тут, если можно сразу передать указатель на int? Та же история с источником, но его почему-то приводят (если это приведение типов) к void. Объясните, пожалуйста.


Ответы (1 шт):

Автор решения: HolyBlackCat

void (*dst)(int) = указатель на функцию с параметром int, возвращающую void.

В C/C++ объявления переменных читают начиная с середины (с имени). Сначала до упора вправо (до ) или до конца объявления), потом до упора влево (до ( или до начала объявления). Если прочитанная часть объявления находится в скобках, скобки и все содержимое убирают и повторяют то же самое.

Пример:

       dst        // `dst` - это...
                  //                   Справа ничего нет, кроме `)`. Смотрим влево.
      *dst        // указатель на...
                  //                   Слева больше ничего нет, кроме `(`.
     (*dst)       //                   Убираем скобки. Смотрим вправо.
     (*dst)(int)  // функцию с параметром `int`, возвращающую...
                  //                   Справа больше ничего нет, смотрим влево.
void (*dst)(int)  // `void`.
→ Ссылка