如果只在C中声明int [3],为什么2 [a]可以通过编译

Eri*_*ang 2 c arrays gcc pointers

如果只在C中声明int [3],为什么可以编译2 [a].

 1  #include <stdio.h>
 2
 3  int main(int argc, char **argv)
 4  {
 5      int a[3] = {1, 2, 3};
 6      printf("a[2] is: %d\n", a[2]);
 7      printf("2[a] is: %d\n", 2[a]);
 8
 9      return 0;
10  }
Run Code Online (Sandbox Code Playgroud)

而输出3,如何解释呢?

ham*_*mar 12

因为a[2]它只是语法糖*(a+2),与*(2+a)or 相同2[a].

  • 有人会称它为合成醋.:-) (3认同)