int a[] = { 1, 2, 3, 4, 5 };
const int N = sizeof(a)/sizeof(a[0]);
cout<<N<<endl;
for (int i = 0; i < N; ++i)
{
cout << (i[a-i]%N)[a+i-1] << " ";
}
// 1 2 3 4 5 と出力されます。つまり、私が理解できなかった配列は cout << (i[ai]%N)[a+i-1] << " "; でした。
これはCBCPATであり、紛らわしいが正しいポインター算術トリックです。
C ++(およびC)での配列サブスクリプションはポインター演算を使用して行われるa
ため、が配列で、i
がインデックス(整数)の場合、
a[i]
と同等です
*(a + i)
足し算は可換なので、これはと同じです
*(i + a)
これは次のように書くことができます
i[a]
つまり、配列(WTH?)を使用して整数にインデックスを付けています。
これを学んだ後、コードを簡単に書き直して、それが何をするのかを理解することができます。
(a + i - 1)[(a - i)[i] % N]
これはただ
(a + i - 1)[1 % N]
順番に
(a + i - 1)[1 % 5],
あれは
*(a + i - 1 + 1)
これは
a[i]
Voilà。このがらくたを書いたプログラマーをねじ込みます。