Почему он ведет себя таким образом?
Добавление целого числа к указателю † - это выражение, которое приводит к новому значению.Категория значения выражения - rvalue.
Операндом оператора address-of должен быть lvalue.Значения не являются значениями.Вы не можете взять адрес выражения, которое возвращает новое значение.
Несколько неясно, что вы пытаетесь сделать.Вот несколько примеров выражений:
&(arr[0]) // address of the first element
arr + 0 // same as above
&(arr[1]) // address of the second element
arr + 1 // same as above
&arr // address of the array.
// note that type of the expression is different,
// although the value is same as the first element
(&arr) + 1 // address of the next array (only valid if arr is
// a subarray within a multidimensional array
// which is not the case in your example)
&(arr+1) // ill-formed; has no sensical interpretation
† arr
не является указателем;это массив.Но массивы затухают до указателя на первый элемент в выражениях, которые используют значение, поэтому в этом контексте тип выражения действительно является указателем после преобразования указатель массива.