我需要编写一个接受in数组且数组大小为参数的函数。该函数应该创建一个大小为参数数组大小两倍的新数组。该函数应该将参数数组的内容复制到新数组,并使用 - 初始化第二个数组的未使用元素。该函数应返回指向新数组的指针。 所以这是我需要完成的提示。我在函数中得到了我想要的数组,但它没有被带到main函数。
void moveOver(int *arr, int size)
{
int *arrp=nullptr;
arrp= new int[size + 1];
//arrp[0] = 0;
for (int i = 1; i <= size; i++)
{
arrp[i] = arr[i-1];
}
arr = new int[size + 1];
*arr = *arrp;
for (int i = 0; i < size + 1; i++) {
//cout << *(arr+i) << endl;
cout << arrp[i] << endl;
}
}
int main()
{
const int size = 4;
int arr[size] = { 1,2,3,4 }, *arrptr=nullptr;
arrptr = arr;
moveOver(arr, size);
for (int i = 0; i <=size ; i++) {
cout << arr[i] << endl;
}
return 0;
}
当它打印时,它只打印4个索引而不是我需要的5个索引。任何意见,将不胜感激。另外我想使用指针和数组,我不能使用向量
答案 0 :(得分:3)
arr
是moveOver()
函数中的局部变量。分配给main()
中的变量没有影响。在main()
中,arr
是一个数组,而不是一个指针,因此您无法重新指定它以指向不同的数组。
您需要更改moveOver()
,以便参考。然后你可以将arrptr
传递给它,该函数将能够重新分配它。
请参阅Pass by Reference / Value in C++
你遇到的另一个问题是*arr = *arrp;
没有复制整个数组,只是复制了数组的第一个元素。但是根本不需要为arr
分配新数组;你可以简单地arr = arrp;
来复制指针。
void moveOver(int *&arr, int size)
{
int *arrp = new int[size + 1];
arrp[0] = 0;
for (int i = 1; i <= size; i++)
{
arrp[i] = arr[i-1];
}
arr = arrp;
for (int i = 0; i < size + 1; i++) {
//cout << *(arr+i) << endl;
cout << arrp[i] << endl;
}
}
int main()
{
const int size = 4;
int arr[size] = { 1,2,3,4 }, *arrptr=nullptr;
arrptr = arr;
moveOver(arrptr, size);
for (int i = 0; i <= size ; i++) {
cout << arrptr[i] << endl;
}
return 0;
}