【问题标题】:Returning arrays from function and losing its size从函数返回数组并丢失其大小
【发布时间】:2014-04-12 00:48:56
【问题描述】:

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

【问题讨论】:

  • 听起来你可能想要std::vector
  • 在我们继续之前,read this.
  • 或者如果你想坚持使用数组,只需传递另一个对函数的引用。并让函数将该变量设置为数组的大小。
  • 谢谢,我会继续阅读的

标签: c++ arrays class pointers methods


【解决方案1】:

如果你真的返回一个本地声明的,那么你有比“失去它的大小”更大的问题。

首先,您必须记住,数组衰减为指针,一旦完成,您将不再拥有有关数组的任何信息,只有指针。而指针的大小是指针的大小,而不是它所指向的大小。

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

【讨论】:

    【解决方案2】:

    我假设您的代码如下所示:

    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";
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 2018-02-16
      • 2013-12-25
      • 2020-03-06
      • 2013-05-04
      • 2017-12-05
      • 1970-01-01
      • 2021-08-24
      • 2014-03-13
      相关资源
      最近更新 更多