Исключение для массива, не затухающего в указатель?

Я видел во многих сообщениях, что "в большинстве случаев имена массивов распадаются на указатели".
Могу ли я узнать, в каких случаях/выражениях имя массива не распадается на указатели на первые элементы?

Ответ 1

Конечно.

В C99 есть три основных случая, а именно:

  • когда он является аргументом оператора & (адрес).

  • когда он является аргументом оператора sizeof.

  • Когда это строковый литерал типа char [N + 1] или широкий строковый литерал типа wchar_t [N + 1] (N - длина строки), который используется для инициализации массива, как в char str[] = "foo"; или wchar_t wstr[] = L"foo";.

Кроме того, в C11 вновь введенный оператор alignof не позволяет сводить аргумент массива к указателю.

В С++ существуют дополнительные правила, например, когда они передаются по ссылке.