我想知道 - 有没有办法将数组复制到C / C ++中的函数?不传递它只是一个地址,但创建一个副本...像int值。例如,我们不发送副本(((:
void arrayAbs(int array[], int size) {
for ( int i = 0; i < size; i++ ) {
if ( array[i] < 0 ) {
array[i] *= -1;
}
}
}
答案 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
类比。