C言語における配列は,ポインタとほぼ同じです.
1: char array[10]; 2: array[0] = 'a'; 3: array[1] = 'b'; 4: array[2] = 'c'; 5: array[3] = '\0';
この例では要素数10のchar型の配列を用意し,順に'a', 'b', 'c'の値を入れています. ここで,'b'を取り出すには,array[1]とすればいいのですが,この演算について考えてみます.
arrayはポインタで,1は正数です.
ここで,arrayはポインタ,1は正数です.
arrayがポインタであるということは,[]はポインタに対して付けることができると言えます.
なので,以下のようなことができてしまいます.
"abc"[1]
さて,
ポインタにおいて,array[1]と同様のことをarray + 1でできることを説明しました.
つまり,array[1]は,単にポインタと正数の加算を行っているだけになります.
array + 1がポインタと正数の加算ということは,+の交換則より,1 + arrayと等価になります.
これを配列の形式に戻すと以下のようにになります.
1[array]
普通に考えるとSyntax Errorのようですが,実は問題なくコンパイルできてしまいます.
要は正数とポインタがそれぞれの要素に入っていればいいだけのことです.
というわけで,上記の二つを組み合わせると次のようなことまでできてしまいます.
1["abc"]
ポインタの多次元配列の動的生成を参照