使用指针复制数组

问题描述 投票:0回答:2

我正在尝试使用名为

array1
的自写函数将
array2
的内容复制到
ArrayCopy()
。数组的大小相同。我必须使用指针来做它。

我知道

array1
中的整数正在复制到
array2
,但是当我在
array2
函数之外打印
ArrayCopy()
时,它仍然打印全 0。我知道
array1
成功地从
cin
获得价值。

我不能更改

main()
末尾的代码块,否则我的作业会扣分。

ArrayCopy()
的一部分被注释掉了,但这只是我尝试过的东西没有用。

为了测试,我为

array1
输入的值是
1, 2, 3, 4, 5
.

#include <iostream>
#include <iomanip>
#include <array>

const int ARRAYSIZE = 5;

void ArrayCopy(std::array<int, ARRAYSIZE>, std::array<int, ARRAYSIZE>);

int main() {

    std::array<int, ARRAYSIZE> array1;
    std::array<int, ARRAYSIZE> array2 = {};
    
    std::cout << "Please input " << ARRAYSIZE << " integers: ";

    // Get user input into array1

    for (int i = 0; i < ARRAYSIZE; i++) {

        std::cin >> array1[i];

        }

  // DO NOT CHANGE THIS CODE
    std::cout << "\n\nBefore copy, array 1 is: \n";
    PrintArray(array1);
    std::cout << "\nAnd array 2 is: \n";
    PrintArray(array2, ARRAYSIZE);

    ArrayCopy(array1, array2);

    std::cout << "\n\nAfter copy, array 1 is: \n";
    PrintArray(array1);
    std::cout << "\nAnd array 2 is: \n";
    PrintArray(array2, ARRAYSIZE);

   // END CODE THAT YOU SHOULD NOT CHANGE

}

void ArrayCopy(std::array<int, ARRAYSIZE> array1, std::array<int, ARRAYSIZE> array2) {

    for (size_t i = 0; i < array1.size(); i++) {

        int *holder1 = &array1[i];
        int *holder2 = &array2[i];

        array2[i] = *holder1;

        /*
        int* temp = holder2;

        holder2 = holder1;
        holder1 = temp;

        int holderInteger = *holder2;

        std::cout << holderInteger;

        array2[i] = holderInteger;
        */

    }

}
c++ pointers function-call function-declaration stdarray
2个回答
1
投票

您需要通过引用传递数组,例如

void ArrayCopy( const std::array<int, ARRAYSIZE> &array1, std::array<int, ARRAYSIZE> &array2) {

    for (size_t i = 0; i < array1.size(); i++) {

        const int *holder1 = &array1[i];
        int *holder2 = &array2[i];

        *holder2 = *holder1;
    }
}

否则函数处理原始数组的副本。

注意你可以将一个数组分配给另一个数组

array2 = array1;

例如

void ArrayCopy( const std::array<int, ARRAYSIZE> &array1, std::array<int, ARRAYSIZE> &array2) {
    array2 = array1;
}

0
投票

按值传递数组。这意味着当您调用

ArrayCopy(array1, array2);
时,array1 和 array2 的副本将传递给该函数。您在函数内部的复制只会复制到 array2 的副本中。

解决方案是将函数接收的参数类型更改为

std::array<int, ARRAYSIZE>&
。类型名后的 & 表示它是引用,因此当您调用函数时,数组的reference 将传递给函数,并且您的函数会修改原始数组。

© www.soinside.com 2019 - 2024. All rights reserved.