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