Что значит такая передача параметров в функцию?
Встретил функцию сжатия данных, в которую аргументы передаются каким-то непонятным для меня образом. Вот объявление этой функции:
int lzw_compress (void (*dst)(int), int (*src)(void), int maxbits)
Дальше идет тело функции. Что происходит при такой передаче параметров? Мы передаем в функцию указатель на область памяти буфера назначения с типом void(отсутствие типа), который в win64 занимает 1 байт (специально проверил sizeof), а затем в скобках стоит тип int (4 байта). Тут использовали приведение типов или это что-то другое? Если это все же приведение типов, то зачем оно тут, если можно сразу передать указатель на int? Та же история с источником, но его почему-то приводят (если это приведение типов) к void. Объясните, пожалуйста.
Ответы (1 шт):
void (*dst)(int) = указатель на функцию с параметром int, возвращающую void.
В C/C++ объявления переменных читают начиная с середины (с имени). Сначала до упора вправо (до ) или до конца объявления), потом до упора влево (до ( или до начала объявления). Если прочитанная часть объявления находится в скобках, скобки и все содержимое убирают и повторяют то же самое.
Пример:
dst // `dst` - это...
// Справа ничего нет, кроме `)`. Смотрим влево.
*dst // указатель на...
// Слева больше ничего нет, кроме `(`.
(*dst) // Убираем скобки. Смотрим вправо.
(*dst)(int) // функцию с параметром `int`, возвращающую...
// Справа больше ничего нет, смотрим влево.
void (*dst)(int) // `void`.