Я видел во многих сообщениях, что "в большинстве случаев имена массивов распадаются на указатели". 
 Могу ли я узнать, в каких случаях/выражениях имя массива не распадается на указатели на первые элементы?
Исключение для массива, не затухающего в указатель?
Ответ 1
Конечно.
В C99 есть три основных случая, а именно:
-  когда он является аргументом оператора &(адрес).
-  когда он является аргументом оператора sizeof.
-  Когда это строковый литерал типа char [N + 1]или широкий строковый литерал типаwchar_t [N + 1](N- длина строки), который используется для инициализации массива, как вchar str[] = "foo";илиwchar_t wstr[] = L"foo";.
Кроме того, в C11 вновь введенный оператор alignof не позволяет сводить аргумент массива к указателю.
В С++ существуют дополнительные правила, например, когда они передаются по ссылке.
