C++从C继承了数组,几乎无处不在.C++提供了易于使用且不易出错的抽象(std::vector<T>自C++ 98和C++ 11std::array<T, n>以来),因此对数组的需求并不像在C中那样频繁出现.但是,当您阅读遗产时代码或与用C编写的库交互,你应该牢牢掌握数组如何工作.
本FAQ分为五个部分:
如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其作为附加部分链接到此处.
在下文中,"数组"表示"C数组",而不是类模板std::array.假定了C声明符语法的基本知识.请注意,面对异常,手动使用new和delete如下所示是非常危险的,但这是另一个常见问题解答的主题.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
以下是C Programming Just the FAQs一书的摘录.这不是错误的,因为Arrays永远不能通过引用传递吗?
VIII.6:如何通过值将数组传递给函数?
答案:通过在被调用函数中声明带有方括号(
[和])的数组名称,数组可以按值传递给函数.调用函数时,只需将数组的地址(即数组的名称)传递给被调用的函数即可.例如,以下程序将数组传递x[]给byval_func()value 命名 的函数:该
int[]参数告诉编译器该byval_func()函数将采用一个参数 - 一个整数数组.byval_func()调用该 函数时,将数组的地址传递给byval_func():Run Code Online (Sandbox Code Playgroud)byval_func(x);由于数组是按值传递的,因此会生成数组的精确副本并将其放在堆栈中.然后被调用的函数接收该数组的副本并可以打印它.因为传递给的数组
byval_func()是原始数组的副本,所以修改byval_func()函数中的数组对原始数组没有影响.