函数原型和数组参数
function prototype and array parameters
我正在学习c++语法,我已经到了我正在寻找数组的地步。我想问你一个问题,但首先让我回顾一下,这样我就知道我把这些东西弄清楚了。我知道您可以使用以下语法将变量定义为数组:
<base type> name [<size(constexpr)>]
(大小是数组类型的一部分)。这将给我一个大小为的数组基类型为的元素如果我想要一个指向基类型的指针数组,我只需在基类型说明符后添加一个*,就像在普通指针声明中一样。
<base type> *name [<size(constexpr)>]
我不能定义一个引用数组,因为数组应该只包含对象(引用只是别名)。
现在,如果我想声明一个指向数组的引用或指针,可以使用以下语法:
<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 (*)[])
Pointer是指针。在这种情况下,它指向一个数组,但它仍然是一个指针。
但这是不允许的:
void f(int (&)[])
无论是否指定name。这将parameter声明为"对未知边界数组的引用",这是不允许的。如果你想接收一个未知大小数组的引用,你可以使用模板:
template <size_t N>
void f(int (&array)[N]);
它完全有效。当然,固定大小的数组(在编译时确定大小)也可以不带名称出现:
void f(int (&)[32]) //Ok
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 估计函数参数数组的维度
- 温度参数数组的内存泄漏
- 如何将值附加到命令行参数数组?
- libpqxx:如何绑定参数数组
- 如何在德尔福中C++参数数组指针算术
- C++函数参数或参数数组
- 将 std::function 代理为需要参数数组的 C 函数
- 分析字符串参数数组
- Pro*C传递参数数组
- OpenCV错误:cvGetSize中的错误参数(数组应该是CvMat或IplImage)
- c++无限参数数组
- 查找命令行参数数组中的元素数
- 如何将目录中所有具有完整路径的文件传递到execv中的参数数组
- ODBC:参数数组-忽略参数
- 使用lambda参数数组