Есть действительно не очень известный трюк.Представьте, что f
- это имя переменной, а *
, ()
и []
- операции, которые вы можете над ней выполнять.Используйте правила приоритета операторов C, чтобы убедиться, что:
f
может быть применено
f()
, а затем разыменовано
*f()
и затем подписано
(*f())[]
, а затем разыменовывается
*(*f())[]
, а затем применяется
(*(*f())[])()
, чтобы получить char
char (*(*f())[])()
, поэтому f
являетсяфункция, возвращающая указатель на массив указателей на функции, возвращающие символ.