Я читал, что в C ++ arr
по сути является указателем на первый элемент в массиве
Это неправильно. Если arr
- это массив, то это массив. Массивы не являются указателями 1 .
, почему при использовании * & arr возвращается адрес
Учитывая, что &arr[0]
является указателем на первый элемент, обращающийся через указатель (*&arr[0]
), дает ссылку lvalue на первый элемент.
Учитывая, что &arr
является указателем на массив, косвенным путем через указатель (*&arr
) дает вам lvalue ссылку на массив. Как и arr
, этот массив lvalue распадается на указатель на первый элемент при преобразовании в rvalue.
За исключением случаев, когда операторы перегружены, *&
по существу компенсируют друг друга. Это обратные операции. *&arr[0]
дает вам то же, что и arr[0]
, а *&arr
дает вам то же, что и arr
.
1 За исключением объявления параметров функции, где массив parmeter фактически вообще не объявляет массив, а вместо этого указывает на элемент такого массива.