Ну строго, говоря decoder может указывать на что угодно, но в данном случае его (адрес) используют в качестве указателя на функцию.
Что лежит по этому адресу - это уже второй вопрос.
То есть ничто не мешает обявить массив указателей void *, которые в действительность есть указатели на функции и радостно их вызывать.
P.S. Кстати, разыменование полученного после каста указателя не нужно, всё равно потом обратно преобразуется к указателю на функцию (function to pointer decay).
Выражение можно упростить и тогда становится более яснее :)
/* Указатель на функцию которая ничего не принимает ничего не возвращает */
typedef void (*f)();
/* А тут получается decoder это указатель, который приводят к указателю на функцию f,
а затем исполняют её */
((*f) decoder)();
Последние () говорят что это вызов функции без параметров, а первая * что её вызвали из указателя, а вот то что между хрень которую надо было выше типом объявить. Но это сишники, они без выстрела в пол около ноги не могут.
Если надо текстом, то вот так: «сначала decoder приводится к указателю на функцию, которая ничего не принимает и не возвращает, а затем происходит вызов функции без параметров через приведённый этот указатель.»