И в языке С, и позаимствовавшем этот бред C++ массивов, как отдельного типа данных, нет. Массивы - всего лишь синтаксический сахар для указателей. Потому, в отличие от других языков, значением массива является не набор его элементов, а указатель на начало массива: типом значения mas является *int. Операция mas - это всего лишь более удобная запись выражения *(mas + i). И как мы можем записать *(i + mas), так мы можем записать и i[mas]. Так что конструкции mas[0], *(mas + 0), *(0 + mas), 0[mas] полностью эквивалентны. P.S. Насколько помню, это разбирается в K&R.