答案 0 :(得分:1)
来自C-FAQ:
问:我遇到了一些包含表达式5 [“abcdef”]的笑话代码。这怎么可能是合法的C?答:是的,弗吉尼亚州,数组下标在C中是可交换的。[脚注]这个奇怪的事实来自数组下标的指针定义,即a [e]与*((a)+(e)相同,对于任何两个表达式a和e,只要其中一个是指针表达式而一个是整数。 “证据”看起来像
a[e]
*((a) + (e)) (by definition)
*((e) + (a)) (by commutativity of addition)
e[a] (by definition)
这种毫无疑问的交换性在C文本中经常被提及,好像它是值得骄傲的东西,但它在混淆的C竞赛之外找不到有用的应用(见问题20.36)。
由于C中的字符串是char数组,因此表达式“abcdef”[5]完全合法,并且计算字符“f”。您可以将其视为
的简写char *tmpptr = "abcdef";
... tmpptr[5] ...
答案 1 :(得分:0)