考虑遵循C代码
int a[]={1,2,3,4};
printf("%d",2[a]);
这打印“3”。怎么可能?我知道在[2]中a是array的基地址。但是在2 [a]中 什么是2?以及它如何访问数组?我完全混淆了数组的这种表示。
答案 0 :(得分:2)
这里要记住两件事:
首先,数组访问基本上只是一种使用指针算法的奇特方式。例如,如果您有数组
int a[10];
然后
a[3] = 5;
等于
*(a + 3) = 5;
要记住的第二件事是添加(如上面的a + 3
)是commutative,因此a + 3
与3 + a
相同。这导致例如
*(3 + a) = 5;
可以解释为
3[a] = 5;
答案 1 :(得分:1)
int a[]={1,2,3,4};
是一个包含4个元素的整数数组,a
是基地址,基地址由X
表示。现在a[1]
表示地址X
+ sizeOf(int) * 2
= Y
(假设)的元素,即地址Y
处的元素,同样2[a]
表示地址处的元素sizeOf(int) * 2
* X
= Y
。
因此,即使您撰写a[2]
或2[a]
,最终编制者也会将其识别为Y
,并在我们的地址Y
处对3
处的元素进行翻译情况下。
希望它能解决问题。
答案 2 :(得分:0)
*(expr1+expr2) is equivalent to expr1[expr2] or expr2[expr1].
*(expr2+expr1) is equivalent to expr2[expr1] or expr1[expr2].
答案 3 :(得分:0)
这是编写数组元素的另一种方法。
在int a[]={1,2,3,4};
中,索引3处的元素可以通过许多方法引用:
a[3]
*(a + 3)
或*(3 + a)
[在算术和C中加法是可交换的] 3[a]
编写第二种表示方式,即a[3]
等于*(a + 3)
等于*(3 + a)
等于3[a]
}。