#include <stdio.h>
int main()
{
int array[3]= { 1, 2, 3 };
printf("%d
", 1[array]); // 2,注意 printf("%d
", [array]);将报错
printf("%d
", -1[array]); // -2
return 0;
}
输出:
分析:
因为对于数组,1[array] == array[1]
同理,对于二维数组:
#include <stdio.h>
int main()
{
int array[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
printf("%d
", array[1][-2]); // 2
printf("%d
", (-1)[array][5]); // 3
printf("%d
", -1[array][5]); // -9
return 0;
}
输出:
分析:
对于二维数组 array[M][N],元素array[i][j]的地址是(*arr) + i * N + j, 值是 * ((*arr) + i * N + j);(-1)[array][5])就是array[-1][5],即 * ((*array) + (-1)* 3 + 5) 等于* ((*array) + 2)
参考链接:https://stackoverflow.com/questions/381542/with-arrays-why-is-it-the-case-that-a5-5a