复杂的声明表达式问题

标签 c

我有这个表达式 int *(*foo())[30]

is foo a function (which receive no arguments) and returns a pointer to an array (size 30) of pointers of integers ?

最佳答案

没有。

您可以按照与正常表达式求值相反的顺序来解码声明。

正常评估顺序:

  1. foo
  2. foo()
  3. *foo()
  4. (*foo())[30]
  5. *(*foo())[30]

所以这个声明是:

  1. *(*foo())[30]:指针
  2. (*foo())[30]:指针数组
  3. *foo():指向指针数组的指针
  4. foo():返回指向指针数组的指针的函数
  5. foo

所以这个声明的意思是“一个函数foo,它返回一个指向int的指针数组的指针”。

你错误的一点是这里没有指定foo的参数数量,因此它的参数数量不必为零。

关于复杂的声明表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635495/

相关文章:

java - 在 C 中实现 Java 的 getResponseCode() ?

c - 用8位指针写入,用32位指针读取

c - 当我尝试使用 struct 运行程序时出现段错误(核心已转储)

c - 是否可以在 google 中搜索 C 而不会在结果中得到 C++?

c - 找到集合的交集

C:从命令行读取两个文件的有效方法

c - 内核如何知道哪些驱动程序属于哪些外设?

CleanMem 工具 - 自动释放 Windows 上分配的内存?

c - 理解指针和空终止字符串

c - 标记 union 中的函数指针为 "tag"