Оба выражения дают одинаковое значение результата. Так что в вашем конкретном случае это в основном вопрос предпочтительного стиля.
Но есть разница, если вы используете выражения, например, при вызове функции. Инструмент статического анализа кода должен жаловаться на
memcpy (& buffer [0], src, 2 * sizeof (buffer [0]));
потому что вы заявляете, что записываете два элемента в один элемент массива. Но инструмент не должен жаловаться на
memcpy (& buffer, src, 2 * sizeof (buffer [0]));
или
memcpy (буфер, src, 2 * sizeof (буфер [0]));
потому что теперь вы говорите, что хотите записать в полный массив.
Соответствующие детали в стандарте :
6.3.2.1 L-значения, массивы и функциональные обозначения
3 За исключением случаев, когда это операнд оператора sizeof или унарный оператор &, или строковый литерал, используемый для инициализации массива, выражение с типом «массив типа» преобразуется в выражение с типом «указатель на тип», который указывает на начальный элемент объекта массива и не является lvalue. [...]
6.5.3.2 Операторы адреса и переадресации
Семантика 3 Унарный оператор & выдает адрес своего операнда. Если операнд имеет тип «тип», результат имеет тип «указатель на тип». [...] Аналогично, если операнд является результатом оператора [], ни оператор &, ни унарный *, подразумеваемый [], не оцениваются, и результат такой, как если бы оператор & был удален, а [ ] оператор был заменен на оператор +. В противном случае результатом является указатель на объект или функцию, обозначенный его операндом.