arr
- это выражение, которое оценивается как int*
(это известная функция «распад массива на указатель»).
&arr
- это выражение, которое оценивается как int (*)[3]
.
Имена массивов 'decay' для указателей на первый элемент массива во всех выражениях, кроме случаев, когда они являются операндами для операторов sizeof
или &
. Для этих двух операций имена массивов сохраняют свою «массивность» (C99 6.3.2.1/3 «L-значения, массивы и указатели функций»).