我有一个向量数组(int),我想将它作为参考传递给成员函数,以便可以修改它。 (它实际上是我的函数的输出,但我已经有一个返回值。)
我写了这样的东西
int Dag::dag2array(vector<int> (&aVectors)[4])
{
//some stuff
//calling another function tree2array(aVectors)
//passing the same array as reference
}
它编译并运行,虽然看起来它没有做我想要的。
在一个或多或少相反的问题(Passing array of vectors as a function parameter (values will not change))中,答案说可以在没有&
的情况下修改数组,并且它不会复制,但它就像一个指针。
int
这样的变量需要&
来避免
复制并能够在运行中修改原始变量的值#34;而不是阵列?&
?答案 0 :(得分:3)
这是C阵列让生活变得艰难的一种情况。我强烈建议您使用std::array
(如果您还没有使用C ++ 11,则使用std::tr1::array
)。而不是那种模糊的语法,说
int func(std::array<std::vector<int>, 4>& vectors)
非常清楚你通过引用传递了4个向量的数组,因此可以通过说
来修改值。vectors[1][2] = 19;
或者你有什么。
答案 1 :(得分:0)
将数组传递给函数时,其类型将调整为指向其第一个元素的指针。同样,表单T[N]
的参数声明也会调整为T*
。传递的指针被复制,但矢量的元素根本不会被复制。这意味着当解除引用指针时,您仍然可以通过数组访问语法array[n]
引用原始数组元素(这实际上只是指针算法:*(array + n)
)。
如果您通过值将实际对象传递给函数,则会出现副本,因此如果您仍想修改元素,则需要引用。
所以不,你不需要通过引用传递数组。除非您想要访问函数中数组的大小(因为数组到指针的衰减会丢弃数组大小)。