函数的返回值不是返回

时间:2017-09-08 23:35:55

标签: c++ arrays pointers

我需要编写一个接受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个索引。任何意见,将不胜感激。另外我想使用指针和数组,我不能使用向量

1 个答案:

答案 0 :(得分:3)

arrmoveOver()函数中的局部变量。分配给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;
}