Суть такова. Есть два стула код на Си:
int r;
char str[]="fuck";
r = str[1];
r = 1[str];
Понятно, что a разворачивается внутри компилятора в нечто вроде *(a+b), где в скобках работает адресная арифметика и всё о'к. Естественно, работает и более сложная конструкция:
int r;
char *str[]={"fuck", "thou"};
r = str[1][1];
r = 1[str][1];
r = 1[str+1];
Но где это описано? Где описано ограничение на индексы массива? Нигде не нашёл.