当作为参数传递给函数时,仅传递指向数组第一个元素的指针。我找到了一个临时解决方法:
int function(int array[], int size) {
int otherArray[50]; // high enough number
for (int i = 0; i < size; i++) {
otherArray[i] = array[i];
}
// use otherArray
}
是否有更有效和简洁的方式传递整个数组? 这似乎效率很低。
编辑:通过对我的数据使用std :: vector并使用&vec [0]检索数组来解决。
答案 0 :(得分:0)
您不能将数组传递给函数。您可以选择近似值:
为获得最大效率,您不想复制阵列。这就是为什么数组首先衰减到指针的原因(尽管它是从C继承的,并且有更好的方法来实现相同或相似的行为,这对类型更安全。)如果要保持类型不衰减,则必须传递对数组或包含该数组的对象的引用。
// pass reference to a raw array (Array of N elements of type T)
template <typename T, int N>
void foo1(T(&arrayArg)[N])
{
std::cout << arrayArg[0] << "\n";
}
鉴于您最初在问题中使用的代码,我怀疑上面就是您想要的。但是,也要考虑其他选择,因为数组不是c ++中非常可靠的数据类型,并且对于常规代码有更好的选择。
// pass reference to std::array
template <typename T, int N>
void foo2(std::array<N, T> const & arrayArg)
{
std::cout << arrayArg[0] << "\n";
}
std :: array是一个类,它在下面包含一个原始数组,但具有更多的C ++友好接口,并且不会衰减。
// pass reference to std::vector
template <typename T>
void foo2(std::vector<T> const & vecArg)
{
std::cout << vecArg[0] << "\n";
}
向量是动态调整大小的,并且与您开始使用的原始数组之间的距离越来越远,但是它是许多c ++数据结构和算法的基础,并且应该是大多数情况下首先要考虑的内容之一。 / p>
答案 1 :(得分:-1)
有一种历史方法可以使用结构将值按数组传递给函数,幸运的是,在c ++中,您可以通过值传递std :: array这样的集合。
您可以了解有关C方式here的更多信息。