Простой ли язык Си? Я покажу вам как в нём строятся типы, и вы сами решите. (Подсказка: непростой.)
Я задумал некий сложный тип. Будем строить его по шагам. Что он по большому счёту представляет? Указатель. Ставим звёздочку.
*
На что указывает наш указатель? На массив. Ставим круглые скобки вокруг звёздочки и дописываем квадратные скобки справа.
(*)[]
Сколько элементов в массиве? Пять. Ставим пятёрку внутри квадратных скобок.
(*)[5]
Что находится в каждом элементе массива? Указатель. Добавляем звёздочку слева.
*(*)[5]
На что указывает этот указатель? На функцию. Какие аргументы принимает функция? Один аргумент типа char. Заворачиваем нашу конструкцию в круглые скобки и справа в круглых скобках добавляем аргументы.
(*(*)[5])(char)
Что возвращает функция? Тип int. Дописываем слева.
int (*(*)[5])(char)
Таким образом, мы имеем указатель на массив из пяти указателей на функции, принимающие char и возвращающие int. Не пытайтесь повторить на трезвую голову. 😀
А чтобы совсем весело стало, добавим внутрь слово static.
int (*(*)[static 5])(char)
Получили указатель на массив из
не менее чем пяти указателей на функции, принимающие char и возвращающие int.