对于整数数组| a |和整数| i |在C中,a [i]给出与i [a]相同的结果

时间:2014-02-14 05:54:55

标签: c arrays

a [i]和i [a]如何在C中给出相同的结果?

| I |不是一个数组,所以我[a]应该在语法上不正确,但给出与[i]相同的输出。

我已在Codepad测试了代码。

请解释。

感谢。

2 个答案:

答案 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)

因为您可以执行以下操作:

a[i] == *(a + i) == *(i + a) == i[a]

看看here