数组衰减为指针的例外情况?

我在很多post中都看到“在大多数情况下,数组名称会衰减为指针”。
我可以知道在什么情况下/数组名称表达式不会衰减成指向其第一个元素的指针吗?

当然。

在C99中有三个基本情况,即:

  1. 当它是& (地址)运算符的参数时。

  2. 当它是sizeof运算符的参数时。

  3. 当它是char [N + 1]类型的字符串文字或类型为wchar_t [N + 1]的宽字符串文字( N是字符串的长度)时,它用于初始化数组,如char str[] = "foo"; 或者wchar_t wstr[] = L"foo";

此外,在C11中,新引入的alignof运算符也不允许其数组参数衰减为指针。

在C ++中,还有其他规则,例如,当它通过引用传递时。