从函数返回数组并丢失其大小

时间:2014-03-08 20:03:57

标签: c++ arrays class pointers methods

所以假设有一个函数int* coeff(int n)返回数组(或者更确切地说,地址到数组[0])。现在,在这个函数中,这个数组的长度比如说5,但是当我把它称为:int* array=SomeObject->coeff(n);那个大小丢失了,我不知道怎么能再把它取回来。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

如果您实际返回本地声明的问题,那么问题就是“失去其大小”。

首先,你必须记住数组衰减到指针,一旦它完成,你就不再有关于数组的任何信息,只有指针。并且指针的大小是指针的大小而不是它指向的大小。

更大的问题可能是你返回一个本地声明的数组。当一个函数返回在其中声明的所有变量超出范围时。那么返回的指针指向什么呢?

答案 1 :(得分:1)

我认为你的代码看起来像这样:

int* coeff(int n)
{
    int* a = new int[5];
    // ...
    return a;
}

我建议使用矢量而不是数组:

#include <vector>

std::vector<int> coeff(int n)
{
    std::vector<int> a(5);
    // ...
    return a;
}

您始终可以通过调用.size()成员函数来获取向量的大小:

int main()
{
    std::vector<int> x = coeff(42);
    std::cout << x.size() << " elements in the vector!\n";
}