数组不会衰减到指针的例外?

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

当然。

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

  1. 当它是& (address-of)运算符的参数。

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

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

而且,在C11中,新引入的alignof运算符不会让它的数组参数衰变成指针。

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