理解C数组语法-3[arr]

理解C数组语法-3[arr],c,arrays,pointer-arithmetic,C,Arrays,Pointer Arithmetic,我正在阅读Head First C,到目前为止进展顺利,但我在这个例子中遇到了问题- int doses[] = {1, 3, 2, 1000}; printf("Issue dose %i", 3[doses]); 结果=发放剂量1000 我知道它的作用,它访问剂量数组的索引3。更严格地说,我的理解是,它将三个整数的大小添加到数组中变量的第一个元素的指针地址中 这本书解释说它之所以有效是因为 doses[3] == *(doses + 3) == *(3 + doses) == 3[dose

我正在阅读Head First C,到目前为止进展顺利,但我在这个例子中遇到了问题-

int doses[] = {1, 3, 2, 1000};
printf("Issue dose %i", 3[doses]);
结果=发放剂量1000

我知道它的作用,它访问剂量数组的索引3。更严格地说,我的理解是,它将三个整数的大小添加到数组中变量的第一个元素的指针地址中

这本书解释说它之所以有效是因为

doses[3] == *(doses + 3) == *(3 + doses) == 3[doses]

直到最后一次在*3+剂量==3[剂量]之间跳跃之前,我一直在坚持。鉴于剂量[3]对我来说很容易理解,也许我没有正确理解[]的重要性?

C标准对[]运算符的定义如下:

doses[3] == *(doses + 3)

Therefore doses[3] will evaluate to:

*(doses + 3)
and 3[doses] will evaluate to:

*(3 + doses)

希望它能帮助你

对于最后一行代码中的第二个和第三个表达式,*剂量+3===*3+剂量不是很明显吗?对于第一个和最后一个表达式,您在上面写道您已经理解了剂量[3]==3[剂量]。请记住,指针算法的工作方式与等效数组索引相同。在引擎盖下的指针上加上3会增加3*sizeofits类型。是的,在它跳到3个[剂量]之前,这是很明显的,因为我没有看到[]操作符的C标准,这就是我问这个问题的原因。抱歉,重复了,但这不是一件很容易的事,我尝试了几个变量。好吧,这是我遗漏的一件事,我不认为这本书给出了标准,或者如果它给出了,我完全错过了它。感谢并抱歉重复的问题,很高兴它帮助了你;