将数组复制到函数c ++

时间:2014-09-11 19:22:57

标签: c++ arrays

我想知道 - 有没有办法将数组复制到C / C ++中的函数?不传递它只是一个地址,但创建一个副本...像int值。例如,我们不发送副本(((:

void arrayAbs(int array[], int size) {
    for ( int i = 0; i < size; i++ ) {
        if ( array[i] < 0 ) {
            array[i] *= -1;
        }
    }
}

3 个答案:

答案 0 :(得分:1)

C和C ++数组不可复制。但是您可以使用类似于数组的标准库容器类型,例如std::array

template <size_t N>
void arrayAbs(std::array<int, N> a) 
{
  for ( int i = 0; i < a.size(); i++ ) {
        if ( a[i] < 0 ) {
            a[i] *= -1;
        }
    }
}

这里,a按值传递,因此它是调用者传入的数组的副本。

答案 1 :(得分:1)

这对于数组来说是不可能的 - 至少在编译时不知道数组的大小时。由于您将size作为单独的参数传递,因此看起来具有固定大小数组的解决方案在您的情况下不起作用。

但是,您可以使用std::vector<int>代替。按值传递时,将复制此容器。作为额外的好处,它知道它的大小,因此传递int size将变得不必要。

答案 2 :(得分:0)

您无法使用数组执行此操作。当传递给函数(在C和C ++中)时,这两个数组都转换为指向它们的第一个元素的指针,或者如果参数被定义为对数组的引用,则传递引用。在任何情况下都不会创建数组的副本。

在C ++中,您可以使用标准类std::array。在这种情况下,您确实可以使用原始数组的副本。在C中,您可以通过在数组中包装数组来使用C ++中的std::array类比。