这是问题:
使用左右规则写出 C 一个名为 fubar 的变量的定义,它是一个指向函数的指针
接受一个指向 char 的指针并返回一个指向 7 个元素的数组的指针,其中每个元素都是一个指向
结构体。
我的答案:*( (Sporcle*)[7] ) ( *fubar )( char* );
任何人都可以验证我的答案和/或给我一些指示(不是双关语)?
编辑答案:( (struct Sporcle*)[7] ) *( *fubar )( char* );
最终答案 struct Sporcle *(*(*fubar)(char *))[7];
最佳答案
一次构建一个:
一个名为 fubar
的变量......
fubar
……那是一个指针……
*fubar
...到一个函数...
(*fubar)()
...需要一个指向字符的指针...
(*fubar)(char *)
...并返回一个指针...
*(*fubar)(char *)
...到一个包含 7 个元素的数组...
(*(*fubar)(char *))[7]
...其中每个元素都是一个指针...
*(*(*fubar)(char *))[7]
...到
struct Sporcle
。struct Sporcle *(*(*fubar)(char *))[7]
你的答案是不正确的 - 左边的东西(称为声明说明符)只能直接指定一个类型(基类型,如
int
、 struct
、 union
、 enum
或使用 0x1044 定义的类型名称,如可选修改存储类,7 typedef
和/或类型说明符,如 static
)。指针、数组和函数类型是通过修改声明的右侧(称为声明符),通过添加 const
、 *
或 []
来构造的。在这种情况下,声明说明符是
()
,其余部分是声明符。
关于定义变量时复杂的从右到左规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392228/