Для меня легче запомнить правило, поскольку отсутствует какая-либо явная группировка, ()
и []
bind before *
.Таким образом, для объявления типа
T *a[N];
[]
связывается перед *
, поэтому a
является массивом указателей из N элементов.Разбиваем его по шагам:
a -- a
a[N] -- is an N-element array
*a[N] -- of pointer
T *a[N] -- to T.
Для объявления, такого как
T (*a)[N];
, паренсы заставляют *
связываться перед []
, поэтому
a -- a
(*a) -- is a pointer
(*a)[N] -- to an N-element array
T (*a)[N] -- of T
Это все еще правило по часовой стрелке / по спирали, просто выраженное в более сжатой форме.