如何返回指向可变大小的数组C ++的指针?

时间:2018-01-01 21:27:40

标签: c++ arrays pointers

我正在创建一个接受可变大小数组和返回平方数组的函数。但是在函数声明中似乎存在问题 - 我得到错误为error: cannot convert 'int**' to 'int*'。返回指向可变大小数组的指针的正确方法是什么?

#include <iostream>
    int *arrSqr(int *a[],int *b)
{
    for (int k=0;k!=*b;++k)
        *a[k] = (*a[k]) * (*a[k]);
    return a;

}

int main()
{
    int* variable_arr;
    int size=10;
    variable_arr = new int[size];
    for (int k=0; k<size; ++k)
        variable_arr[k] = k;
    int *v2=arrSqr(variable_arr,size);
    //display
    for (int k=0; k<size; ++k)
        std::cout<<(*v2)[k]<<"  ";
    std::cout<<std::endl;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您只需要为数组传递一个int指针,并为该大小传递一个int。然后你的代码简化了,因为你不必在任何地方取消引用,只需使用operator []。

#include <iostream>
int *arrSqr(int *a, int b) //<- here I changed the function signature to take int* and an int
{
    for (int k = 0; k != b; ++k) //<- you don't need to dereference the size
        a[k] = (a[k]) * (a[k]); //<- you can just use [] to index the array
    return a;

}

int main()
{
    int* variable_arr;
    int size = 10;
    variable_arr = new int[size];
    for (int k = 0; k<size; ++k)
        variable_arr[k] = k;
    int *v2 = arrSqr(variable_arr, size);
    //display
    for (int k = 0; k<size; ++k)
        std::cout << v2[k] << "  "; //<- same story when printing
    std::cout << std::endl;
    return 0;
}