Почему это работает? Нелогичный доступ к массиву

Мой друг впервые изучает 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] правильный синтаксис в этом случае?

Ответы на вопрос(1)

Ваш ответ на вопрос