符号,如&
, *
等,两者都使用表达式 and 声明,这是两个不同的概念。
In 表达式,符号为运营商,为此我们有一个明确定义的优先级和结合性表。当表达比较复杂,我们可以利用这张表进行分解分析。
例如
(a + b) * ++c
Question:
In 声明,这些符号不是operator因此我们不能应用运算符的优先级和结合性表. 声明中的符号是否有优先级和关联性表?
或者换句话说,当声明变得复杂时(尝试这个int*& (*&f(int*))
),有没有系统的方法来分解分析呢?
一个密切相关的后续问题:
一些书(入门书)教我们如何阅读复杂的声明,并举了一个例子typedef
:
typedef int (*tp_alias)[10]; //defines tp_alias as an pointer to an array of 10 int
书上教的方法:使用别名作为阅读的起点, tp_alias
是新类型名称。向左看,有一个*
,所以它是一个指针。然后看括号外面:向右,[10]
表示它是一个大小为 10 的数组;向左转,int
表示数组的元素是int。
后续问题:我们如何读取其他类型别名声明,例如using
?既然别名已经不存在了?例如using tp_alias = int (*)[10]
?
或许可以从内部读取()
,但是如果有多个怎么办()
s?(我还没见过,但有可能。)
您使用螺旋法则。
一个很好的解释是here http://c-faq.com/decl/spiral.anderson.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)