Мой друг впервые изучает C++ и прислал мне этот фрагмент кода:
int foo[] = { 3, 38, 38, 0, 19, 21, 3, 11, 19, 42 };
char bar[] = " abcdefghijklmnopqrstuvwxyz01234567890+-,.!?-_";
for (int i = 0; i < 10; ++i) {
std::cout << foo[i][bar];
}
С первого взгляда я сказал ему, что это не сработает — я думал, что это не скомпилируется или, по крайней мере, приведет к нарушению прав доступа, поскольку foo
не является двумерным массивом, на что он ответил, что работает.
Я попробовал сам, и, к моему удивлению, фрагмент работал нормально. Вопрос: почему?
Согласно логике, здравому смыслу и хорошей практике синтаксис должен быть bar[foo[i]]
.
Мне стыдно признаться, что я понятия не имею, что происходит. Что делает foo[i][bar]
допустимым синтаксисом в этом случае?