>>45
x[i]とはxの配列で、それがどの様に並んでいるかと言うと
x[0] x[1] x[2] … x[i] /* x[0]〜x[i]は連続して配置されている */
では、C言語がx[i]のxをどう扱うかと言うと次の様になります
x=&x[0]; /* x[0]のアドレスをxとする */
次に、どうすれば正しくx[i]の値を扱うかと言うと
x[i]==*(x+i);
/* (x[0]のアドレス+i*x[0]のサイズ)のアドレスにあるx[0]と同じサイズの値 */
よってx[i]と*(x+i)は同じ様に扱えるので
規格で、どちらでも同じ様に扱えられるように決められたので
i[x]==*(x+i);
もOKとなる