Общая процедура чтения типа в C / C ++:
- Определите конечный тип, который может быть базовым типом или идентификатором typedef, и который может иметь модификаторы типа, такие как const, volatile и т. Д. В вашем примере это "char".
- Применить операторы к идентификатору в том же порядке приоритета, что и в выражениях. Эти операторы могут быть * (разыменование), [] (индекс) и () (вызывать функцию).
В оригинальной философии синтаксиса ваш пример был бы написан "char * array [5]", идентификатор - "array", а операторы - [] (index), а затем * (разыменование).
Объявление затем читается как контракт: «Если вы примените эти операторы в таком порядке, тогда вы получите объект окончательного типа».
В вашем случае полное предложение звучит так: «если вы индексируете переменную« массив », а затем разыменовываете полученное выражение, вы получаете символ».
Вы также можете считать это так: «если вы индексируете переменную« массив », то вы получаете объект такой, что если вы разыменуете его, вы получите символ»
Хитрость заключается в том, чтобы отслеживать тот факт, что [] и () имеют более высокий приоритет, чем *. Вы можете контролировать порядок операторов с помощью скобок, как и для регулярных выражений.