2013-01-20 79 views
1

可能副本(C):
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. void (*comp)() COMP的阵列[13]:函数指针返回void

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

  4. char (*(*x[3])())[5] X:数组指针的[3]的功能返回指针数组[5] 炭

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

最后,我的问题是:

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

是否确定INT(* daytab)[13] 声明daytab指向int的数组[13]? –

+3

@PascalCuoq它没有,它是一个指向13个整数数组的指针。 –

+0

@SethCarnegie我知道你知道这一点。我在问OP。 –

回答

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是一个指针

+0

请给出每个这些例子的完整含义吗?非常感谢! – qed