arris an expression that evaluates to int*(this is the well-known function "decay an array into a pointer").
&arr- An expression that evaluates to int (*)[3].
Array names "decay" points to the first element of the array in all expressions, except when they are operands for sizeofor &. For these two operations, array names retain their "massiveness" (C99 6.3.2.1/3 "Lvalues, arrays and function notation").