1

我需要我的函数返回一个数组,但它不像大多数搜索示例所示的那样将数组作为参数。

代码是这样的:

double  myfunction ()
{
    double arr[10];
    //assign values to the array
    return arr;
}

main()
{
    double arr2[10];
    arr2[10] = myfunction;
    //print arr2
}

当我使用指针来显示数组时,我得到了像“CCCCCC”这样的值......

4

2 回答 2

6

你不能这样做......数组是内存块,因此不能“返回”......你可以通过函数调用传递指向数组的指针,但你不能安全地返回指向的指针除非声明了这些数组,否则数组内存块static。否则会得到未定义的结果,因为函数返回时数组占用的堆栈内存将被回收,返回的指向堆栈内存位置的指针将无效。使用返回的指针很可能会破坏堆栈,或者使您的程序崩溃。

在 C 中,您必须显式使用指向堆分配数组的指针以避免此问题,但在 C++ 中,最好使用std::vectorstd::array用于固定大小的数组。例如,std::vector仍然使用堆内存来存储数组(而不是堆栈),但通过 RAII,堆内存由对象的生命周期安全地管理。因此,与 C 不同,您不必担心由于无法释放指向堆内存的函数返回的指针所指向的内存而导致内存泄漏。

于 2012-05-30T01:23:04.797 回答
1

注意:main 必须有 result type int,符合 C 和 C++ 标准。

在任何可能的地方使用也是一个好主意const,因为这会给代码增加约束,使代码更容易理解(更少考虑)。

最后,也是最重要的,一定要使用标准库设施。

#include <array>
using namespace std;

typedef array<double, 10> MyArray;

MyArray myfunction ()
{
    MyArray arr;
    //assign values to the array
    return arr;
}

int main()
{
    MyArray const arr = myfunction();
    //print arr2
}
于 2012-05-30T01:49:13.400 回答