C-编程语言中的复杂声明

Vid*_*dhi 3 c

我遇到了一个非常复杂的声明,我无法理解:

char ( * ( * f[3]) ()) [5] ;
Run Code Online (Sandbox Code Playgroud)

我想知道如何确定宣布的内容.
另外,由于这个问题是在接受采访时向我询问的,我想知道这些代码是否实际用于软件行业?

如果没有,那么问的目的是什么?

Aka*_*tra 10

简单地将声明分成几部分.
最内部的大括号:(*f [3])表示'f'是一个由3个元素组成的数组,它们是指针.

( *f )()意味着'f'是指向函数的指针,因此
( * f[3] ) () f表示一个3个指向函数的数组.

( * ( * f[3] ) ()) 表示f是一个返回指针的3个指针数组.

因此,

char ( * ( * f[3] ) ()) [5]  ;
Run Code Online (Sandbox Code Playgroud)

表示f是一个3个指向函数的数组,返回一个指向5个字符数组的指针