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

标签 c variables pointers right-to-left

这是问题:
使用左右规则写出 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]

你的答案是不正确的 - 左边的东西(称为声明说明符)只能直接指定一个类型(基类型,如 intstructunionenum 或使用 0x1044 定义的类型名称,如可选修改存储类,7 typedef 和/或类型说明符,如 static )。指针、数组和函数类型是通过修改声明的右侧(称为声明符),通过添加 const*[] 来构造的。

在这种情况下,声明说明符是 (),其余部分是声明符。

关于定义变量时复杂的从右到左规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392228/

相关文章:

c - shell(bash) 如何在 linux 中工作,即它如何处理后台运行进程

c - C中Valgrind的解读

c - 如何将多维 int 数组传递给 C 中的函数?

c - 如何为不同的方法以不同的名称调用相同的文件?

bash - Bash 中的动态变量名称

php - 将变量传递给 sql WHERE IN 子句

c++ - 可以安全地使用指向 vector 元素的指针来确定它在容器中的位置吗?

variables - Ansible 剧本范围的变量

c - malloc/calloc 分配一个已经分配的地址

c - C 和 strcpy 中的字符串指针数组