Luc*_*uca 5 c++ arrays pointers reference
我正在学习C++语法,并且我已经到了我正在研究数组的地步.我想问你一个问题,但首先让我回顾一下,所以我知道我得到了这些东西.我知道您可以使用以下语法将变量定义为数组:
<base type> name [<size(constexpr)>]
(大小是数组类型的一部分).这将给我一个基本类型的大小元素数组 如果我想要一个指向基类型的指针数组,我可以在基本类型说明符之后添加一个*,就像在普通指针声明中一样.
<base type> *name [<size(constexpr)>]
我无法定义引用数组,因为aray应该只包含对象(而引用只是别名).
现在,如果我想声明一个引用或指向数组的指针,我可以使用以下语法:
<base type> (&name) [<size(constexpr)>]
要么
<base type> (*name) [<size(constexpr)>]
到目前为止,一切都很清楚.我也知道,我可以将数组作为参数传递给函数,但该调用将始终被解释为我传递指向数组元素类型的指针.声明如下的函数:
void f(int array[10])
是相同的:
void f(int array[])
void f(int *p)
每当我调用这个函数时,我总是传递一个int*(传递值).
问题:如果我想在不使用参数名称的情况下编写函数原型(纯声明),该怎么办?我知道在这种情况下我通常可以省略参数名称(我可以写void f(int*)但是其他两个声明呢?)更重要的是,如果参数是引用或指向数组的指针怎么办?
void f(int (&array)[])
要么
void f(int (*array)[])
谢谢!
这很好:
void f(int[])
void f(int*)
这也是:
void f(int (*)[])
指针是一个指针.在这种情况下,它指向一个数组,但它仍然是一个指针.
但是,这是不允许的:
void f(int (&)[])
无论是否指定名称.这将参数声明为"对未知边界的数组的引用",这是不允许的.如果要接收对未知大小的数组的引用,可以使用以下模板:
template <size_t N>
void f(int (&array)[N]);
这完全有效.当然,固定大小的数组(在编译时大小)也可以没有名称出现:
void f(int (&)[32]) //Ok