先把标识符加上:int * ( * ( * aaa) [10] )( void ),ANSI C规定,从标识符开始向左向右按照优先级分别读取,如果有小括号,则先读括号中的内容,如果在同一个括号中,数组和函数的优先级高于指针,也就是说,如果在同一个级别中,右边有数组的方括号或者函数的圆括号,左边有指针的星号,则先读右边的数组和函数,后读左边的指针。
对于你这道题,首先读最内层的* aaa,aaa是一个指针,然后增加下一层* ( * aaa) [10],先读右边的数组,它是中心词,即aaa是指向数组的指针,然后是左边的指针,aaa是指向数组的指针,数组中的元素还是指针,继续增加下一层int * ( * ( * aaa) [10] )( void ),先读右边的函数,aaa是指向数组的指针,数组中的元素是指向函数的指针,然后读左边的int *,aaa是指向数组的指针,数组中的元素是指向函数的指针,函数的参数为空,函数的返回值是指向整型的指针。
int * ( * ( * ) [10] )( void )
int * () (void)是函数指针,返回int* 参数void
里面的*(*)[10]是一个指针数组,其中每个元素是一个指向上述类型函数入口点的指针
从内到外,括号优先!
里到外,右边原则,