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