我正在阅读一个关于C的教程,我看到了这样的语法:
int doses[] = {1, 3, 2, 1000};
doses[3] == *(doses + 3) == *(3 + doses) == 3[doses]现在重点是获得int 1000,但最后一个没有任何意义。它不是晚了,我的大脑就失去了功能,它是C特有的东西,或者是一个错误。当涉及到指针时,我想要涵盖我的所有基本知识,所以仔细阅读它。这意味着要理解一切。任何答案都将不胜感激!
发布于 2012-12-02 09:37:03
来自Wikipedia
因为表达式ai在语义上等价于*(a+i),而后者又相当于*(i+a),所以表达式也可以编写为ia,尽管很少使用这种形式。
发布于 2012-12-02 09:39:54
是的,数组订阅在C中是可交换的,e1[e2]和*((e1)+(e2))确实是一样的。但是它在生产代码中是无用的,这个符号的唯一目的就是制造模糊的源代码。
发布于 2012-12-02 09:38:53
ISO c99 : 6.5.2.1 Array subscripting1
其中一个表达式的类型为“指向对象类型的指针”,另一个表达式为整数类型,结果为“类型”类型。
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))
https://stackoverflow.com/questions/13668014
复制相似问题