数组不会衰减到指针的例外?
我曾在很多post中看到“在大多数情况下,数组名称衰变为指针”。
我可以知道在什么情况下/expression式数组名不会衰减到第一个元素的指针?
当然。
在C99中有三个基本的情况,即:
-
当它是
&
(address-of)运算符的参数。 -
当它是
sizeof
运算符的参数。 -
当它是
char [N + 1]
types的string文字或wchar_t [N + 1]
(N
是string长度)的宽string文字时,用于初始化数组,如char str[] = "foo";
或wchar_t wstr[] = L"foo";
。
而且,在C11中,新引入的alignof
运算符不会让它的数组参数衰变成指针。
在C ++中,还有其他的规则,例如,当它通过引用传递时。