我在许多帖子中看到过“在大多数情况下,数组名称会衰减为指向其第一个元素的指针”。
我可以知道在哪些情况/表达式中,数组名称不会衰减为指向其第一个元素的指针吗?
我在许多帖子中看到过“在大多数情况下,数组名称会衰减为指向其第一个元素的指针”。
我可以知道在哪些情况/表达式中,数组名称不会衰减为指向其第一个元素的指针吗?
好的。
C99 中有三种基本情况,分别是:
当它是 &
(取地址)运算符的参数时。
当它是 sizeof
运算符的参数时。
当它是类型为 char [N + 1]
或类型为 wchar_t [N + 1]
(N
是字符串长度)的字符串字面值,用于初始化数组时,例如 char str[] = "foo";
或 wchar_t wstr[] = L"foo";
。
此外,在 C11 中,新引入的 alignof
运算符也不会使其数组参数退化为指针。
在 C++ 中,还有其他规则,例如当它通过引用传递时。
const char *str_ptr = "literal";
。在我的例子中,str
声明为数组,因此它 是 一个数组。 - user529758const char foo[] = <another array>;
是可以的——只要这个数组是一个字符串字面值。 - user529758