1

可能重复:
如何理解复杂的函数声明?
用于解析 C 表达式的螺旋规则和“声明遵循用法”

您可能已经阅读过K&R 的 The C Programming Language一书中的同名部分“复杂声明” 。我只是在读这本书,并试图用 C 语言提高自己。在阅读了提到的部分之后,我想我无法理解 C 声明语句的语法背后的逻辑。1、2、3 和 4 来自第 5 节,第 6 节来自其他页面。

  1. int (*daytab)[13] daytab:指向 int 数组 [13] 的指针

  2. void (*comp)() comp:指向返回 void 的函数的指针

  3. char (*(*x())[])() x:函数返回指向数组[]的指针,指向函数返回char的指针

  4. char (*(*x[3])())[5] x:指向函数的指针的数组 [3] 返回指向 char 的数组 [5] 的指针

  5. typedef int (*PFI)(char *, char *) 创建类型 PFI,用于“指向函数(两个 char * 参数)返回 int 的指针。语法在这里如何工作?

最后,我的问题是:

  • 你能通过上面的例子来解释你思考和阅读复杂声明的方式吗?
  • 1、3、4 之类的东西是否实际可用和需要?如果是这样,你能写一些代码示例吗?
4

2 回答 2

6

在过去一周左右的时间里,我在 HackerNews 上看到了“顺时针/螺旋规则” 。这是考虑 C 声明,尤其是函数指针的好方法。

于 2013-01-20T16:23:59.357 回答
2

查看右侧的标识符和符号:

  • 如果它是一个[标识符是一个数组。
  • 如果它是一个(标识符是一个函数
  • 如果它)向左看,你会发现*:标识符是一个指针
  • 如果右侧或左侧没有任何内容,则标识符是“普通旧”对象。

阐述:

  1. int (*daytab)[13]
    daytab是一个指针

  2. void (*comp)()
    comp是一个指针

  3. char (*(*x())[])()
    x是一个函数

  4. char (*(*x[3])())[5]
    x是一个数组

  5. typedef int (*PFI)(char *, char *)
    PFI是一个指针

于 2013-01-20T16:27:40.917 回答