复杂的声明(C)

时间:2013-01-20 16:21:51

标签: c syntax declaration

  

可能重复:
  How to understand complicated function declarations?
  Spiral rule and ‘declaration follows usage’ for parsing C expressions

您可能已经阅读了K&R's The C Programming Language 一书中有一个标题相同的部分“复杂的声明”。我正在阅读这本书并试图用C语言改进自己。在阅读了上面提到的部分之后,我想我无法理解C声明语句的语法背后的逻辑。 1,2,3和4来自第5和第6部分来自其他页面。

  1. int (*daytab)[13] daytab:指向int

  2. 的数组[13]的指针
  3. void (*comp)() comp:返回void的函数指针

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

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

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

  7. 最后,我的问题是:

    • 你能解释一下你的思维方式和阅读方式 声明可能通过上面的例子使用?
    • 是这样的     1,3,4几乎可以使用和需要?如果是这样,你能写一些代码示例吗?

2 个答案:

答案 0 :(得分:5)

过去一周左右,我在HackerNews上看到了The ``Clockwise/Spiral Rule''。这是考虑C声明的好方法,尤其是函数指针。

答案 1 :(得分: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是一个指针