1 [索引]在c中的含义是什么?

时间:2015-12-11 10:24:59

标签: c compilation

为什么以下代码不会生成错误并打印存储在arr中的值,然后是垃圾值?

int main() {
    int arr[1]={10};
    printf("%d %d\n",0[arr], 1[arr] );
    return 0;
}

2 个答案:

答案 0 :(得分:2)

在C中,0[arr] == arr[0]

所以,

0[arr]==arr[0]==10.

1[arr]==arr[1]==Junk value

选中SO question and it's answers

  

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

     

a [b] == *(a + b)

     

因此,[5]将评估为:

     

*(a + 5)和5 [a]将评估为:

     

*(5 + a)从小学数学我们知道那些是平等的。 (加法是可交换的。)

     

这是表示作为指针的数组的直接工件,“a”是一个   内存地址。 “a [5]”是5个元素的值   “一个”。该元素的地址是“a + 5”。这等于偏移量   来自地址空间(5 + a)开头的“5”元素的“a”。

答案 1 :(得分:0)

1[arr]arr[1]相同。

这是可能的,因为根据E1[E2]运算符的定义,(*((E1) + (E2))相当于C中的[]

请注意,如果您声明:

int arr[1]={10};

数组中只有元素arr[0]且没有arr[1]元素。