我正在阅读关于C的教程,我遇到了这种语法:
int doses[] = {1, 3, 2, 1000};
doses[3] == *(doses + 3) == *(3 + doses) == 3[doses]
现在重点是获得int 1000
,但最后一个没有任何意义。要么它的晚期和我的大脑没有运作,它的特定于C的东西,或它的错字。我想在指针上涵盖我所有的基础知识,仔细阅读它。这意味着要理解这一切。任何答案都将非常感谢!
答案 0 :(得分:7)
由于表达式a [i]在语义上等价于*(a + i),后者又相当于*(i + a),因此表达式也可以写为i [a],尽管这种形式是很少使用。
答案 1 :(得分:2)
是的,数组下标在C中是可交换的。e1[e2]
确实与*((e1)+(e2))
相同。但它在生产代码中是无用的,这种表示法的唯一目的是制作混淆的源代码。
答案 2 :(得分:0)
ISO c99 : 6.5.2.1 Array subscripting
1
其中一个表达式应具有类型''指向对象类型的指针'',另一个表达式应该
具有整数类型,结果类型为''type''。
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
因为+
是可交换的E1[E2] == E2[E1]
,因为它实际上被评估为(*(E1+E2))