C数组算术和指针

可能重复:
在C数组中,为什么这是真的? a [5] == 5 [a]

我正在阅读关于C的教程,并且我遇到了这个语法:

int doses[] = {1, 3, 2, 1000};
doses[3] == *(doses + 3) == *(3 + doses) == 3[doses]

现在的重点是获得int 1000 ,但最后一个没有任何意义。 无论是迟到还是我的大脑都不能正常工作,它是C特有的,还是它的错字。 我想在涵盖所有基本知识的时候仔细阅读指针。 这意味着理解这一切。 任何答案将不胜感激!


从维基百科

由于表达式a [i]在语义上等价于*(a + i),而它相当于*(i + a),所以表达式也可以写成i [a],尽管这种形式很少使用。


是的,数组下标在C中是可交换的e1[e2]的确与*((e1)+(e2)) 。 但是它在生产代码中是没用的,这个表示法的唯一目的就是制作混淆的源代码。


ISO c99 : 6.5.2.1 Array subscripting

1
其中一个表达式应该有''指向对象类型的指针'',另一个表达式应该是整数类型,结果的类型是''类型''。

E1[E2] either E1 will be pointer to object type and E2 will be integer type.

要么,

E1 is integer type and E2 is of pointer to that type

as +是可交换的,所以E1[E2] == E2[E1] ,因为它实际上评估为(*(E1+E2))

链接地址: http://www.djcxy.com/p/86741.html

上一篇: C array arithmetic and pointers

下一篇: C++ reversing indexer and name of array