在C中访问数组元素的不同方式

Joe*_*Joe 14 c arrays

我是C编程课程的助教,我遇到了以下C代码:

char str[] = "My cat's name is Wiggles.";
printf("%c %c %c %c\n", str[5], *(str + 5), *(5 + str), 5[str]);
Run Code Online (Sandbox Code Playgroud)

我之前从未见过最后一个论点(5[str]),我的教授也没有.我认为K&R和C Primer Plus中没有提及它.我在一组技术面试问题中找到了这段代码.有谁知道为什么C允许你以这种方式访问​​数组元素?我从未听说过括号集之外的索引以及括号内的数组名称.

对你的帮助表示感谢!

kpr*_*bst 9

完全有效C.来自维基百科:

类似地,由于表达式a [i]在语义上等价于*(a + i),而这相当于*(i + a),表达式也可以写成i [a](虽然这种形式很少用过的).

古怪,但有效.


小智 5

str[5]直接翻译为*(str + 5),5[str]直接翻译为*(5 + str). 同样的事情=)


Bri*_*ach 2

类似地,由于表达式 a[i] 在语义上等价于 *(a+i),而 *(a+i) 又等价于 *(i+a),因此表达式也可以写成 i[a](尽管这种形式很少见)用过的)。

http://en.wikipedia.org/wiki/C_syntax#Accessing_elements