从没有参数的函数返回整数数组

Ale*_*lex 7 c++ arrays pointers return function

可能重复:
通过指针从C和C++中的函数返回本地数据

我需要创建一个没有返回数组的参数的函数

我收到错误:"警告:函数返回局部变量的地址"

我的代码已经简化,便于阅读

int * getNums()
{
    int nums[8];
    nums = {1,2,3,4,5,6,7,8};
    return nums;
}
Run Code Online (Sandbox Code Playgroud)

我被领导明白,当函数结束时指针丢失,但数组仍然会被发送?如果没有,在函数调用中返回没有参数的整数数组的好方法是什么?

提前感谢您的帮助!

干杯

小智 7

不,阵列不会被"发送".您需要执行以下操作之一:

  • 使用new动态创建数组
  • 静态创建数组
  • 将数组作为指针传递给函数
  • 使用std :: vector

在大多数情况下,最后一个是首选解决方案.

  • `+ 1`为`std :: vector`.(你可能想要添加`std/boost :: array`.) (2认同)

ild*_*arn 5

假装你不知道C-arrays是什么,并加入现代C++的世界:

#include <array>
std::array<int, 8> getNums()
{
    std::array<int, 8> ret = {{ 1, 2, 3, 4, 5, 6, 7, 8 }};
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

如果您的编译器太旧而无法提供std::std::tr1::实现array<>,请考虑使用boost::array<>.或者,考虑使用std::vector<>任何一种方式.

  • 如果`std/tr1/boost :: array`不可用,那么你可以返回一个包含数组的结构; 这可能比`std :: vector`更有效,特别是对于小数组. (2认同)

Mah*_*esh 3

我了解到,当函数结束时,指针会丢失,但数组是否仍会被发送?

该行为是未定义的。

在函数调用中返回没有参数的整数数组的好方法是什么?

int nums[8];
Run Code Online (Sandbox Code Playgroud)

num是驻留在堆栈上的局部变量。您无法返回局部变量的引用。nums相反,使用运算符分配new并记住delete[]它。

int* getNums()
{
     int *nums = new int[8] ;
     // .....

     return nums ;
}

// You should deallocate the resources nums acquired through delete[] later,
// else memory leak prevails.
Run Code Online (Sandbox Code Playgroud)