引用C11标准:
数组子包(第6.5.2.1节)
下标运算符
[]
的定义是E1[E2]
与(*((E1)+(E2)))
相同。
我想知道为什么E1
周围的括号必须(它们在C89标准中缺失), ie ,其中表达式(*(E1+(E2)))
可能与(*((E1)+(E2)))
不同{1}}?
答案 0 :(得分:10)
根据http://www.open-std.org/jtc1/sc22/wg14/www/docs/n841.htm,为了清楚起见插入了它。这两个表达式在语法上是等价的。
公众意见号码PC-UK0103
评论1.
类别:编辑变更/非规范性贡献
委员会起草小节:6.3.2.1
标题:数组下标示例
详细说明:第2段应将“
(*(E1+(E2)))
”替换为“(*((E1)+(E2)))
”,以避免 混乱。是的,我知道语法图表非常合适 毫不含糊,但第2段目前的措辞非常混乱。