7.8 我遇到一些 ``搞笑" 的代码, 包含 5["abcdef"]  这样的 ``表达式"。 这为什么是合法的 C 表达式呢 ?

是的, 弗吉尼亚7.1, 数组和下标在 C 语言中可以互换。这个奇怪的事实来自数组 下标的指针定义, 即对于任何两个表达式 a 和 e, 只要其中一个是 指针表达式而另一个为整数, 则 a[e] 和 *((a)+(e)) 完全一样。这种交换性 在许多 C 语言的书中被看作值得骄傲的东西, 但是它除了在混乱 C 语言竞赛 之外, 其实鲜有用武之地。

参考资料: [Rationale, Sec. 3.3.2.1]; [H&S, Sec. 5.4.1 p. 124, Sec. 7.4.1 pp. 186-7]。



脚注

... 弗吉尼亚7.1
这里有个美国典故, 在 1897 年, 有个叫 弗吉尼亚 (Virginia) 的八岁小女孩, 她对圣诞老人是否存在感到困惑, 因而写了封寻问信给《纽约太阳报》, 于是就有了 ``Yes, Virginia, there is a Santa Claus" 这篇评论, 有兴趣的朋友可以在  http://www.hymnsandcarolsofchristmas.com/santa/virginia's_question.htm 找到相关资料。
翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)