Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么即使将数组名与其索引交换,也可以使用数组?_C_Arrays - Fatal编程技术网

C 为什么即使将数组名与其索引交换,也可以使用数组?

C 为什么即使将数组名与其索引交换,也可以使用数组?,c,arrays,C,Arrays,检查我编写的以下C代码。我认为编译器可能会抱怨I[a],但实际上它打印的值与a[I]完全相同。这是怎么发生的 #include <stdio.h> int main(){ int a[3] = {0, 1, 2}; int i; for(i = 0; i < 3; i++){ printf("normal a[%d] = %d\n", i, a[i]); printf("abnormal a[%d] = %d\n", i, i[a]); }

检查我编写的以下C代码。我认为编译器可能会抱怨I[a],但实际上它打印的值与a[I]完全相同。这是怎么发生的

#include <stdio.h>

int main(){
  int a[3] = {0, 1, 2};
  int i;
  for(i = 0; i < 3; i++){
    printf("normal a[%d] = %d\n", i, a[i]);
    printf("abnormal a[%d] = %d\n", i, i[a]);
  }

  return 0;
}
  • a[i]
    相当于
    *(a+i)
  • i[a]
    相当于
    *(i+a)
    ,后者相当于
    *(a+i)

  • 因此,实际上,两者都是相同的。

    因为点击我评论中的代码,看看为什么我知道这可能是显而易见的,因为人们对我的帖子投了反对票。但为了确保我明白发生了什么。要做指针算术,假设a是指针,i是索引,我总是可以做i[a],它总是等于*(a+i)?@dannycrane的人很可能会对你的帖子投反对票,因为这是一个常见的常见问题,他们认为你在发布问题之前没有做足够的研究。至于它为什么有效,请检查链接的重复问题中的答案。
    normal a[0] = 0
    abnormal a[0] = 0
    normal a[1] = 1
    abnormal a[1] = 1
    normal a[2] = 2
    abnormal a[2] = 2