函数的返回值未返回

The return value of the function isn't being return

本文关键字:返回 返回值 函数      更新时间:2023-10-16

我需要编写一个函数,该函数接受数组和数组的大小作为参数。该函数应创建一个新数组,该数组的大小是参数数组的两倍。该函数应将参数数组的内容复制到新数组,并用 - 初始化第二个数组的未使用元素。该函数应返回指针到新数组。因此,这是我需要完成的提示。我在功能中获得了想要的数组,但并未将其带入主要功能。

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个索引。任何意见,将不胜感激。我也想使用指针和数组,我不能使用向量

arrmoveOver()函数内部的局部变量。分配给它没有影响main()中的变量。在main()中,arr是一个数组,而不是指针,因此您不能重新分配给其他数组。

您需要更改moveOver(),因此需要参考。然后,您可以将arrptr传递给它,并且该功能将能够重新分配。

请参阅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;
}