数组元素的不同表示

时间:2013-11-20 06:36:19

标签: c arrays

考虑遵循C代码

int a[]={1,2,3,4};
printf("%d",2[a]);

这打印“3”。怎么可能?我知道在[2]中a是array的基地址。但是在2 [a]中 什么是2?以及它如何访问数组?我完全混淆了数组的这种表示。

4 个答案:

答案 0 :(得分:2)

这里要记住两件事:

  • 首先,数组访问基本上只是一种使用指针算法的奇特方式。例如,如果您有数组

    int a[10];
    

    然后

    a[3] = 5;
    

    等于

    *(a + 3) = 5;
    
  • 要记住的第二件事是添加(如上面的a + 3)是commutative,因此a + 33 + 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处的元素可以通过许多方法引用:

  1. 作为数组元素:a[3]
  2. 使用指针:*(a + 3)*(3 + a) [在算术和C中加法是可交换的]
  3. 现在您可以使用指针3[a]编写第二种表示方式,即a[3]等于*(a + 3)等于*(3 + a)等于3[a] }。