定义变量时复杂的"从右到左"规则

lor*_*ara 2 c variables pointers right-to-left

这是一个问题:
使用右 - 左规则编写一个名为fubar的变量的C定义,该变量是一个指向函数的指针,该函数接受一个指向char的指针并返回一个指向7个元素的数组的指针,其中每个元素都是一个指针到结构Sporcle.

我的答案:

*( (Sporcle*)[7] ) ( *fubar )( char* );

任何人都可以验证我的答案和/或给我一些指示(没有双关语)?

编辑答案:

( (struct Sporcle*)[7] ) *( *fubar )( char* );

最终答案

struct Sporcle *(*(*fubar)(char *))[7];

caf*_*caf 15

一次建立一块:

一个名为fubar... 的变量

fubar
Run Code Online (Sandbox Code Playgroud)

......那是一个指针......

*fubar
Run Code Online (Sandbox Code Playgroud)

...到一个功能......

(*fubar)()
Run Code Online (Sandbox Code Playgroud)

......带有指向char的指针......

(*fubar)(char *)
Run Code Online (Sandbox Code Playgroud)

...并返回一个指针......

*(*fubar)(char *)
Run Code Online (Sandbox Code Playgroud)

...到7个元素的数组......

(*(*fubar)(char *))[7]
Run Code Online (Sandbox Code Playgroud)

...每个元素都是一个指针......

*(*(*fubar)(char *))[7]
Run Code Online (Sandbox Code Playgroud)

......到struct Sporcle.

struct Sporcle *(*(*fubar)(char *))[7]
Run Code Online (Sandbox Code Playgroud)

你的答案是不正确-在左边(叫的东西声明说明)只能直接指定类型(如基本类型int,一struct,union,enum或类型名称与定义typedef,任选与存储类的像修改static和/或类型说明者喜欢const).指针,阵列和功能类型通过修改声明的右手侧(称为构造说明符),通过添加*,[]()给它.

在这种情况下,声明说明符是struct Sporcle,而余数是声明符.