返回指针问题

时间:2017-03-29 03:39:40

标签: c++ pointers

我正在尝试复制数组的副本,但新副本需要按相反的顺序排列。我的问题是我的reverse功能,我评论了错误说明的内容,我不明白为什么它会说明这一点?如果copy是指针变量?我仍在苦苦挣扎,我真的只想澄清我做错了什么。我还没有制作一个反向指针变量,一旦我弄清楚为什么我给出了这个错误,我打算这样做。

这是功能

int* reverse(int elements, int size)
{
    int* copy = new int [size];
    int k =0;
    for(int j=size-1; j >=0;j--)
    {
        copy[k] = size[j]; // Error-> Subscripted value is not an array,pointer or vector
        k++;
    }
    return copy;
}

这里没有功能的整个代码,

#include <iostream>

int* allocation(int);
void output(int*, int);
int* reverse(int*, int);

int main()
{
    int size;
    std::cout << "Enter the size you want to allocate" << std::endl;
    std::cin >> size;
    int* array = allocation(size);
    std::cout << "Displays the elements of the array";
    output(array,size);
    return 0;
}

void output(int* array, int size)
{
    for(int k=0;k<size;k++)
    {
        std::cout << " " << array[k];
    }
}

int* allocation(int elements)
{
    int* ptr = new int[elements];
    std::cout << "Enter the elements for size of array." << std::endl;
    for(int i =0; i < elements; i++)
    {
        std:: cin >> ptr[i];
    }
    return ptr;
}

1 个答案:

答案 0 :(得分:2)

reverse函数的问题在于您没有将指针传递给必须以相反顺序复制的源数组。相反,你已经通过了两个int

错误

  

错误 - &GT;下标值不是数组,指针或向量

当您尝试将size作为数组添加到size[j]的下标时,会发生

,这很明显,因为sizeint类型而不是指针,数组或向量

我已经从

更改了你的功能的签名
int* reverse(int elements, int size)

int* reverse(int *elements, int size)

我已修改你的功能以便这样看

int* reverse(int *elements, int size)
{
    int* copy = new int [size];
    for(int j=size-1, k=0; j >=0; j--, k++)
    {
        // copy from elements and not size, elements is the array containing 
        // the values to be copied, size denotes the size of the array
        copy[k] = elements[j];  
    }
    return copy;
}

旁注:

  1. 我还将k放在for循环的范围内。
  2. 您可能希望使用std::vectorstd::array而不是使用原始数组
  3. 我在定义函数int* reverse(int*, int);
  4. 时看到您使用了正确的签名