我正在尝试使用名为
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;
*/
}
}
您需要通过引用传递数组,例如
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;
}
按值传递数组。这意味着当您调用
ArrayCopy(array1, array2);
时,array1 和 array2 的副本将传递给该函数。您在函数内部的复制只会复制到 array2 的副本中。
解决方案是将函数接收的参数类型更改为
std::array<int, ARRAYSIZE>&
。类型名后的 & 表示它是引用,因此当您调用函数时,数组的reference 将传递给函数,并且您的函数会修改原始数组。