闲暇时翻阅'C专家编程',再次看到对C语言变量声明的理解一节,遂想起我曾经写过的那篇利用'right-left'规则分析复杂的C语言变量声明的文章'C复杂声明解析',发现其中的例子的对比性不够强,所以决定再用一篇短文来再阐述。

至于'right-left'规则这里就不再重述了。这里想重点分析一组对比'鲜明'的例子:分析int *p[20]和int (*p)[20]。
闲话就不多说了,我们看下面对这两个C语言声明的分析吧:

例子1:int *p[20];
1) 找到标识符:p,读作:“p是…”;
2) 向右看:发现一“[]”,然后遇到右边声明结尾,读作:“p是…的数组”;
3) 向左看:发现一“*”, 读作:“p是指向…的指针的数组”;
4) 继续向左看:没有发现0.中定义的符号,则分析结束,读作:“p是指向int类型的指针的数组”,再详细些“p是指向int类型的指针的数组,该指针数组大小为20”。

例子2:int (*p)[20];
1) 找到标识符:p,读作:“p是…”;
2) 向右看:没发现完整的'[]'或者'()',而是一个')',这时停止向右看;
3) 向左看:发现一“*”,然后继续向左看,碰到一个'(',这次左看结束,读作:“p是一个指向…的指针”;
4) 向右看:发现一个'[]',并且右部声明就此结束,我们读作:“p是一个指向…的数组的指针”;
5) 向左看:没有发现0.中定义的符号,则分析结束,读作:“p是一个指向int类型的数组的指针”,再详细些“p是一个指向int类型的数组的指针,该int类型数组大小为20”。

其实通过这组对比鲜明的例子我们可以更好的理解'right-left'规则,更好的理解C声明的规律。

© 2006, bigwhite. 版权所有.

Related posts:

  1. 一个C++项目的Makefile编写-Tony与Alex的对话系列
  2. APR源代码分析-内存篇
  3. 再说内存
  4. APR源代码分析-网络IO篇
  5. Hacker Culture摘要